summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}