summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia/transport_udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia/transport_udp.c')
-rw-r--r--pjmedia/src/pjmedia/transport_udp.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c
index 70f16d6d..688ef240 100644
--- a/pjmedia/src/pjmedia/transport_udp.c
+++ b/pjmedia/src/pjmedia/transport_udp.c
@@ -752,6 +752,8 @@ static void transport_detach( pjmedia_transport *tp,
pj_assert(tp);
if (udp->attached) {
+ int i;
+
/* Lock the ioqueue keys to make sure that callbacks are
* not executed. See ticket #460 for details.
*/
@@ -772,6 +774,13 @@ static void transport_detach( pjmedia_transport *tp,
udp->rtcp_cb = NULL;
udp->user_data = NULL;
+ /* Cancel any outstanding send */
+ for (i=0; i<PJ_ARRAY_SIZE(udp->rtp_pending_write); ++i) {
+ pj_ioqueue_post_completion(udp->rtp_key,
+ &udp->rtp_pending_write[i].op_key, 0);
+ }
+ pj_ioqueue_post_completion(udp->rtcp_key, &udp->rtcp_write_op, 0);
+
/* Unlock keys */
pj_ioqueue_unlock_key(udp->rtcp_key);
pj_ioqueue_unlock_key(udp->rtp_key);