diff options
-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; } |