From 0dae7c961effd3ab73660a95623031850b3987bd Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Fri, 31 Oct 2008 17:54:14 +0000 Subject: Ticket #673: rollback r2360, and implement new fix for Race condition may cause crash in SRTP transport ticket git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2361 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/transport_srtp.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c index 4b04e699..409ac00f 100644 --- a/pjmedia/src/pjmedia/transport_srtp.c +++ b/pjmedia/src/pjmedia/transport_srtp.c @@ -646,18 +646,23 @@ static pj_status_t transport_attach(pjmedia_transport *tp, transport_srtp *srtp = (transport_srtp*) tp; pj_status_t status; - /* Attach itself to transport */ - status = pjmedia_transport_attach(srtp->member_tp, srtp, rem_addr, rem_rtcp, - addr_len, &srtp_rtp_cb, &srtp_rtcp_cb); - if (status != PJ_SUCCESS) - return status; - /* Save the callbacks */ srtp->rtp_cb = rtp_cb; srtp->rtcp_cb = rtcp_cb; srtp->user_data = user_data; - return status; + /* Attach itself to transport */ + status = pjmedia_transport_attach(srtp->member_tp, srtp, rem_addr, + rem_rtcp, addr_len, &srtp_rtp_cb, + &srtp_rtcp_cb); + if (status != PJ_SUCCESS) { + srtp->rtp_cb = NULL; + srtp->rtcp_cb = NULL; + srtp->user_data = NULL; + return status; + } + + return PJ_SUCCESS; } static void transport_detach(pjmedia_transport *tp, void *strm) @@ -798,12 +803,7 @@ static void srtp_rtp_cb( void *user_data, void *pkt, pj_ssize_t size) err_status_t err; if (srtp->bypass_srtp) { - /* Callback may be NULL if we receive stray packets (or when packet - * is received while we're being detached/re-attached). - */ - if (srtp->rtp_cb) { - srtp->rtp_cb(srtp->user_data, pkt, size); - } + srtp->rtp_cb(srtp->user_data, pkt, size); return; } @@ -863,9 +863,6 @@ static void srtp_rtcp_cb( void *user_data, void *pkt, pj_ssize_t size) err_status_t err; if (srtp->bypass_srtp) { - /* Callback may be NULL if we receive stray packets (or when packet - * is received while we're being detached/re-attached). - */ srtp->rtcp_cb(srtp->user_data, pkt, size); return; } -- cgit v1.2.3