summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2009-06-05 15:55:28 +0000
committerBenny Prijono <bennylp@teluu.com>2009-06-05 15:55:28 +0000
commit37b9ba7b9c3b2fd9ff8a7720d4209523a87f9b2c (patch)
treedcfc6c90883c5cef52ad18a741a68af0564db989 /pjmedia
parentf405520af6c1e62a8e3d120cfccff2eff98c132c (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
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/transport_udp.c10
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;
}