Skip to content

get_headers does not return when using http2 #202

Open
@Mehgugs

Description

@Mehgugs

I've ran into an issue where sending requests with request.version = 2 leads to an ETIMEDOUT even though the server receives the request properly. After inspecting the state of the coroutine which was running my request I can see that execution is held up at the poll in the get_headers function.

Data pulled from an active request (request:go called with a timeout of 1000):

stack traceback:
        [C]: in function 'coroutine.yield'
        /usr/local/share/lua/5.4/cqueues.lua:45: in function '_cqueues.poll'
        /usr/local/share/lua/5.4/http/h2_stream.lua:1222: in method 'get_headers'
        /usr/local/share/lua/5.4/http/request.lua:598: in method 'go'
        ....

locals at the get_headers stack frame:

self            http.h2_stream{connection=http.h2_connection{type="client"};id=1;state="half closed (local)";parent=0;dependees={}}
timeout         998.9164443
deadline        7024.448864047
(temporary)     function: 0x5653d5ba8e20
(temporary)     CQS Condition: 0x5653d5aaf218
(temporary)     http.h2_connection{type="client"}
(temporary)     998.9164443

Line 1222 is the following:

local which = cqueues.poll(self.recv_headers_cond, self.connection, timeout)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions