ymoona wrote:
> Thank for you patches, they seem to work fine here.
> I'm also trying to find and fix some leaks.
> 
> I have a problem with OsTimerTask.cpp line 36.
> OsBSem* OsTimerTask::sLock = new OsBSem(OsBSem::Q_PRIORITY, OsBSem::FULL);
> 
> there is created an OsBSem object ( actually it is created twice ) but
> it is
> never deleted. Because this is a dynamic initializer it is called even
> before the main(). I'm not sure who owns the
> semaphore and who should delete it. I'm unable to delete it  from the
> main() because sLock is private. Does every timertask has its own
> semaphore or is there just one globally?
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> sipxtapi-dev mailing list
> [email protected]
> List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/

Read http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.16
regarding static initialization fiasco in C++.

That is why there are dynamic sigletons in the whole code. Some of them
can be made static, but not all.

This lock is used to make sure only 1 instance of OsTimerTask can be
created in multithreaded environment. If you delete it, it will be
impossible to restart sipxtapi. OsTimerTask::destroyTimerTask is not
called from any destructors of static members, so the lock could be made
static without breaking anything.

Try making OsTimerTask static singleton too. That could however be
potentially dangerous because we post a message to the message queue and
some static members of other classes could be required that at that time
are already uninitialized.

Jaroslav Libak

_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/

Reply via email to