[pjsip] Thread-Error

Benny Prijono bennylp at pjsip.org
Tue Feb 26 05:45:10 EST 2008

On 2/25/08, Adeyeye O. Michael <micadeyeye at crg.ee.uct.ac.za> wrote:
> HI Benny,
>  I have pjsip integrated successfully into Mozilla FF in a
>  loosely-coupled approach. The immediate problem is that once I
>  de-register and try to register again, my browser hangs/crashes.
>  Obviously, it has to do with thread because here is the error that I get
>  at the console:
>  firefox-bin: ../src/pj/os_core_unix.c:276: pj_thread_register: Assertion
>  `thread->signature1 != 0xDEAFBEEF || thread->signature2 != 0xDEADC0DE ||
>  (thread->thread == pthread_self())' failed.
>  [New LWP 11919]
>  I understand that I need to register a thread when using an external
>  API/program. First, my browser crashes when I try registering a thread

Just to be more precise, you need to register the current thread
before calling PJSIP/PJLIB API, *only* when the current thread has not
been registered to PJLIB before *and* this thread was created using
native thread API rather than pj_thread_create().

>  before using pjsua_create,pjsua_init or pjsua_start. Otherwise, it works
>  fine when i perform the registration task(pjsua_init, pjsua_start)
>  without registering a thread first (i.e. it is using the PJSUA

FYI pjsua_create() will call pj_create() to initialize PJLIB, and this
implicitly registers current thread to PJLIB. In other words, no need
to register the thread that calls pjsua_create() since this will have
been done in pj_create().

>  self-generated thread). Whenever I want to perform task like send IM and
>  de-register, I need to register a thread (though same thread parameters).

Yes, that's a good approach. A slightly better approach probably is to
check whether the thread has been registered before registering it
again, using pj_thread_is_registered().

But there is a bug in your code. When registering a thread, the
pj_thread_desc MUST have a lifetime that's at least the same as the
thread being registered (or the easiest is to make the pj_thread_desc
variable static). So you cannot allocate this from a local variable
like the one in your code.


>  I usually call pjsua_destroy (to free resourses and de-register). Should
>  I do this, my browser will crash whenever I want to register again and
>  produces the error above. I tried couple of things like unregistering
>  current/all thread (s) before/after calling pjsua_destroy but won't work.
>  Any useful info on this. Here is my implementation code with thread
>  being registered when sending IM (line 297) and destroying(line 374):
>  http://pastebin.mozilla.org/343980
>  Is any resource is in use or there are existing threads after destroying??
>  How can I fix this??
>  Sorry for my poorly indented code!!!
>  Mike.
>  _______________________________________________
>  Visit our blog: http://blog.pjsip.org
>  pjsip mailing list
>  pjsip at lists.pjsip.org
>  http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

More information about the pjsip mailing list