negative size buf in writer после writev() not ready

kron nginx-forum на forum.nginx.org
Вс Ноя 24 23:45:32 UTC 2019


Доброго всем дня!
Сейчас в процессе написания модуля для nginx по генерации PDF
(https://github.com/undying/nginx-html2x-module/blob/master/src/ngx_http_html2x_module.c#L205)
и наткнулся в процессе на странное.
Началось с того, что если тестировать локально, то генерация и отдача PDF
работает.
Если разнести сервер и клиента на разные машины, начинаются проблемы.

В логе нашел следующее:
2019/11/24 23:22:31 [debug] 9#9: *1 http write filter limit 0
2019/11/24 23:22:31 [debug] 9#9: *1 writev: 44540 of 168186
2019/11/24 23:22:31 [debug] 9#9: *1 writev: -1 of 123646

2019/11/24 23:22:31 [debug] 9#9: *1 writev() not ready (11: Resource
temporarily unavailable)

2019/11/24 23:22:31 [debug] 9#9: *1 http write filter 000055D3FDBEFF60
2019/11/24 23:22:31 [debug] 9#9: *1 http copy filter: -2
"/html2pdf?dpi=100"
2019/11/24 23:22:31 [debug] 9#9: *1 http finalize request: -2,
"/html2pdf?dpi=100" a:1, c:1
2019/11/24 23:22:31 [debug] 9#9: *1 event timer add: 3: 60000:1302169663
2019/11/24 23:22:31 [debug] 9#9: *1 epoll add event: fd:3 op:3 ev:80002005
2019/11/24 23:22:32 [debug] 9#9: *1 http run request: "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http writer handler:
"/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http output filter "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http copy filter: "/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 write old buf t:0 f:0 00007FFFC360B460,
pos 0000000000000000, size: 1254989623795351808 file: 94368983417552, size:
-94368983417552

2019/11/24 23:22:32 [alert] 9#9: *1 negative size buf in writer t:0 r:0 f:0
00007FFFC360B460 0000000000000000-116A9E69E31F8100 000055D3FDBBFF00
94368983417552-0, client: 192.168.1.228, server: , request: "POST
/html2pdf?dpi=100 HTTP/1.1", host: "html2x.domain.local"

2019/11/24 23:22:32 [debug] 9#9: *1 http copy filter: -1
"/html2pdf?dpi=100"
2019/11/24 23:22:32 [debug] 9#9: *1 http writer output filter: -1,
"/html2pdf?dpi=100"

Насколько я понял, после первой пачки байт сокет становится занят и запись
откладывается, но с наступлением таймера, при повторной попытке записи
оказывается, что буфер для чтения пуст.
Пока не понял, почему так может быть. Был бы благодарен за любую подсказку.

Posted at Nginx Forum: https://forum.nginx.org/read.php?21,286312,286312#msg-286312



Подробная информация о списке рассылки nginx-ru