[pjsip] unregistered external thread

Ilya Kalinin ilyak at skuku.com
Tue Apr 28 04:32:14 EDT 2009


I agree about thread safety, but in my case there is only one thread
that enters it's thread function, so I don't see problems in that(in my
case). Anyway I still have problem with that, but it's probably my
problem. I'll try to find it out.

 

Best regards,

Ilya  

________________________________

From: pjsip-bounces at lists.pjsip.org
[mailto:pjsip-bounces at lists.pjsip.org] On Behalf Of Jim Gomes
Sent: Monday, April 27, 2009 9:19 PM
To: pjsip list
Subject: Re: [pjsip] unregister external thread

 

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/20090428/3901ca78/attachment-0001.html>


More information about the pjsip mailing list