Under TRUE_ASYNC_SERVER_REACTOR_POOL=1 a handler that calls $response->sendFile() gets no delivery: the worker-side stream ops (src/core/worker_dispatch.c, worker_stream_ops) have no send_file op, and the dispose path renders only the buffered body — the send-file request is silently dropped.
Local (non-pool) H1/H2/H3 all deliver sendFile via their per-protocol pumps.
Possible shapes:
- a dedicated wire kind that hands the (path, offset, length) to the reactor and runs the existing reactor-side sendfile pump (
http3_static_response.c already pumps files on the reactor for the static path), or
- reuse the static-handler HARD_ZERO machinery with the worker only resolving/validating the file.
Until then sendFile() under the pool should at least fail loudly instead of dropping.
Context: the streaming reverse path (STREAM_HEADERS/CHUNK/END/ABORT wires, credit backpressure) landed in PR #104 — sendFile is the one remaining response mode not marshalled across the split.
Under
TRUE_ASYNC_SERVER_REACTOR_POOL=1a handler that calls$response->sendFile()gets no delivery: the worker-side stream ops (src/core/worker_dispatch.c,worker_stream_ops) have nosend_fileop, and the dispose path renders only the buffered body — the send-file request is silently dropped.Local (non-pool) H1/H2/H3 all deliver sendFile via their per-protocol pumps.
Possible shapes:
http3_static_response.calready pumps files on the reactor for the static path), orUntil then
sendFile()under the pool should at least fail loudly instead of dropping.Context: the streaming reverse path (STREAM_HEADERS/CHUNK/END/ABORT wires, credit backpressure) landed in PR #104 — sendFile is the one remaining response mode not marshalled across the split.