diff options
author | Benny Prijono <bennylp@teluu.com> | 2009-06-05 15:55:28 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2009-06-05 15:55:28 +0000 |
commit | 37b9ba7b9c3b2fd9ff8a7720d4209523a87f9b2c (patch) | |
tree | dcfc6c90883c5cef52ad18a741a68af0564db989 | |
parent | f405520af6c1e62a8e3d120cfccff2eff98c132c (diff) |
Ticket #844: Assertion in on_rx_rtp(transport_udp.c) possibly due to race condition (thanks Peter Cai and Michael Broughton for the report)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2753 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | pjmedia/src/pjmedia/transport_udp.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c index 2236392c..019063c5 100644 --- a/pjmedia/src/pjmedia/transport_udp.c +++ b/pjmedia/src/pjmedia/transport_udp.c @@ -637,6 +637,12 @@ static pj_status_t transport_attach( pjmedia_transport *tp, /* Must not be "attached" to existing application */ PJ_ASSERT_RETURN(!udp->attached, PJ_EINVALIDOP); + /* Lock the ioqueue keys to make sure that callbacks are + * not executed. See ticket #844 for details. + */ + pj_ioqueue_lock_key(udp->rtp_key); + pj_ioqueue_lock_key(udp->rtcp_key); + /* "Attach" the application: */ /* Copy remote RTP address */ @@ -672,6 +678,10 @@ static pj_status_t transport_attach( pjmedia_transport *tp, pj_bzero(&udp->rtcp_src_addr, sizeof(udp->rtcp_src_addr)); udp->rtp_src_cnt = 0; + /* Unlock keys */ + pj_ioqueue_unlock_key(udp->rtcp_key); + pj_ioqueue_unlock_key(udp->rtp_key); + return PJ_SUCCESS; } |