The tcp_read.c code does not cover all cases when the connection can be closed, 
only when that happens during reading operations. But not on lifetime 
expiration and some other events -- that was the reason to move the execution 
of the event route for closed event in the tcp-main, because it is the process 
that destroys it, even when the close is detected on-read.

I don't think the solution is to go back to the older approach, but find a way 
to share the connection structure, because it is not yet destroyed when event 
route is executed, just no longer in the hash table.

Btw, I pushed some code after my previous comment, trying to make it more 
flexible to work with both cases: connection found active or connection just 
available for the event_route before destroying it.

Regarding the fact that the main-tcp can be occupied too long, that is a matter 
of what you do in the event route. If you know that is going to be some 
lengthly action with network i/o, then delegate it to another worker with 
mqueue+rtimer or async modules. Similar problems can happen for lengthy actions 
used in failure-route (blocking timer process) or even for sip worker processes.

Anyhow, you are welcome to propose enhancements as PRs, they will be reviewed 
and merged if they improve things.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/3768#issuecomment-1969380889
You are receiving this because you are subscribed to this thread.

Message ID: <kamailio/kamailio/issues/3768/1969380...@github.com>
_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to