As you all know, an extremely convenient way to seize a semaphore is to
use an OsLock object:
...
{
OsLock lock(semaphore);
...do stuff, protected by 'semaphore'...
}
...
But sometimes this paradigm is awkward because at the end of "do stuff",
you want to call another function, and you need to release 'semaphore'
before you call that function. Of course, you can have the protected
code set a flag variable, and then do the call outside of the block with
the OsLock, but that is hard to read, and the coding gets awkward. (It
gets even messier when the arguments to the function "should" be
temporary variables declared in nested blocks.)
I've coded an addition to OsLock that allows the code to "prematurely"
release the lock, before the OsLock object is destroyed. The paradigm
is:
...
{
OsLock lock(semaphore);
...do stuff, protected by 'semaphore'...
lock.release();
// 'semaphore' is free now.
external_method();
}
...
Of course, you have to check that flow of control from the call
of ::release() to the end of the block declaring the OsLock does not
require 'semaphore' be held.
The current code for this change is available as:
svn diff -c 17614
http://sipxecs.sipfoundry.org/rep/sipXecs/branches/user_dworley_subscribe/sipXportLib
Comments?
Dale
_______________________________________________
sipx-dev mailing list [email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev
Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev
sipXecs IP PBX -- http://www.sipfoundry.org/