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