]> git.ipfire.org Git - thirdparty/asterisk.git/commit
res_odbc: release threads from potential starvation.
authorJaco Kroon <jaco@uls.co.za>
Tue, 10 Dec 2024 19:47:49 +0000 (21:47 +0200)
committerAsterisk Development Team <asteriskteam@digium.com>
Thu, 23 Jan 2025 18:39:41 +0000 (18:39 +0000)
commit18206add1c2d9bd9f7799319fe8cf737d92849ed
tree32031626eaa4ad76840b2fcabc2aa47be0fbd9b7
parent2a2b88e6691f29ccdf9220b99a9e6f4304963d16
res_odbc: release threads from potential starvation.

Whenever a slot is freed up due to a failed connection, wake up a waiter
before failing.

In the case of a dead connection there could be waiters, for example,
let's say two threads tries to acquire objects at the same time, with
one in the cached connections, one will acquire the dead connection, and
the other will enter into the wait state.  The thread with the dead
connection will clear up the dead connection, and then attempt a
re-acquire (at this point there cannot be cached connections else the
other thread would have received that and tried to clean up), as such,
at this point we're guaranteed that either there are no waiting threads,
or that the maxconnections - connection_cnt threads will attempt to
re-acquire connections, and then either succeed, using those
connections, or failing, and then signalling to release more waiters.

Also fix the pointer log for ODBC handle %p dead which would always
reflect NULL.

Signed-off-by: Jaco Kroon <jaco@uls.co.za>
(cherry picked from commit 89ffbb5de7feed2cefb1427fa4b144b442dc4f2a)
res/res_odbc.c