[Freeswitch-users] fscore mutex locking question
Benedikt Fraunhofer
fraunhofer.lists.freeswitch-001 at traced.net
Thu Aug 27 07:08:23 PDT 2009
Hello *,
while looking at the code i came across a region of code which is
unclear to me regarding locking issues.
One example is switch_ivr_broadcast in switch_ivr_async.c. This should
be the function called by
uuid_broadcast() and others.
in line 2341 it tries to queue an event to the bleg if it has to...
-----
. if ((flags & SMF_ECHO_BLEG) && (other_uuid =
switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))
. . && (other_session = switch_core_session_locate(other_uuid))) {
---
switch_core_session_locate() does a "readonly trylock" on the channel
mutex returning NULL if it's unable to
aquire the lock, which brings up the following question:
If some other thread is currently holding a writelock on the channel,
the broadcast is not queued and not retried at a later time at all?
I guess it's pretty easy to cause some unexpected behaviour using some
endless loop calling "uuid_setvar" or some other race condition where
the channel-mutex is write-locked while calling uuid_broadcast (eg.
uuid_media?).
Could this lead to a problem in "real live" scenarios, or are there
other countermeasures despite "chances are one in a million that you
hit that small time frame"?
thx in advance
Beni.
More information about the FreeSWITCH-users
mailing list