From 37b9ba7b9c3b2fd9ff8a7720d4209523a87f9b2c Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Fri, 5 Jun 2009 15:55:28 +0000 Subject: 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 --- pjmedia/src/pjmedia/transport_udp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) 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; } -- cgit v1.2.3