[pjsip] unregister external thread

Jim Gomes Jim.Gomes at tideworks.com
Mon Apr 27 14:19:24 EDT 2009


I would like to point out that the implementation used below is not thread safe.  To use static variables in such a manner is incorrect.  To be thread-safe, it is necessary to use thread local variables.  I submit the following function for use in the public domain.  It can and should be called before any PJSIP functions are called by a thread:

/*
 * pj_thread_auto_register(void)
 */
PJ_DEF(pj_status_t) pj_thread_auto_register(void)
{
    pj_status_t rc;

    if(!pj_thread_is_registered())
    {
      pj_tls_var(pj_thread_desc) rpc_thread_desc;
      pj_thread_t* thread_ptr;

      rc = pj_thread_register("auto_thr%p", rpc_thread_desc, &thread_ptr);
    }
    else
    {
      rc = PJ_SUCCESS;
    }

    return rc;
}


Regards,
Jim Gomes

From: pjsip-bounces at lists.pjsip.org [mailto:pjsip-bounces at lists.pjsip.org] On Behalf Of Ilya Kalinin
Sent: Sunday, 26 April, 2009 1:53 AM
To: pjsip list
Subject: Re: [pjsip] unregister external thread

Oh, this happens then I call for pj_thread_sleep() within the thread functions
________________________________
From: pjsip-bounces at lists.pjsip.org [mailto:pjsip-bounces at lists.pjsip.org] On Behalf Of Ilya Kalinin
Sent: Sunday, April 26, 2009 11:50 AM
To: pjsip at lists.pjsip.org
Subject: [pjsip] unregister external thread

Hi, I using simple wrapper on pj_thread functions, to create threads in my application. I also always add this magic code to the thread functions:
    static pj_thread_desc desc;
    static pj_thread_t *thread;

    if(!pj_thread_is_registered()) {
        pj_thread_register(NULL,desc,&thread);
    }

It worked fine with 1.0rc2, but with 1.0.1 I get the old error:

11:35:32.936 os_core_win32.  pjlib 1.0.1 for win32 initialized
EstablishAssertion failed: !"Calling pjlib from unknown/external thread. You mus
t " "register external threads with pj_thread_register() " "before calling any p
jlib functions.", file e:\work\pjproject-wince-1.0.1\pjlib\src\pj\os_core_win32.
c, line 522
ed call.
Assertion failed: mutex->owner == pj_thread_this(), file e:\work\pjproject-wince
-1.0.1\pjlib\src\pj\os_core_win32.c, line 945

What can be the problem?

Best regards,
Ilya
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20090427/9f68bb70/attachment.html>


More information about the pjsip mailing list