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/1969380889(a)github.com>