summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-10-31 17:54:14 +0000
committerBenny Prijono <bennylp@teluu.com>2008-10-31 17:54:14 +0000
commit0dae7c961effd3ab73660a95623031850b3987bd (patch)
treedcde7c044726f4be7c53bcdd1b9035c4fb4337b6 /pjmedia
parente33c8a7050450a7f2c90623fc3dd5520cb0db85b (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.c29
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;
}