diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-10-31 17:54:14 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-10-31 17:54:14 +0000 |
commit | 0dae7c961effd3ab73660a95623031850b3987bd (patch) | |
tree | dcde7c044726f4be7c53bcdd1b9035c4fb4337b6 /pjmedia | |
parent | e33c8a7050450a7f2c90623fc3dd5520cb0db85b (diff) |
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
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/src/pjmedia/transport_srtp.c | 29 |
1 files 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; } |