summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2015-11-16 04:42:42 +0000
committerNanang Izzuddin <nanang@teluu.com>2015-11-16 04:42:42 +0000
commit2b2aaa7bba77b4615e58a3b2b25dab404064e366 (patch)
tree287d747c9d85943090cd2831c9372af06210623c
parentea961f64dd7f8040c35f92ac7a7751d203bda49e (diff)
Fix #1898: If transport is being shutdown/destroyed and connected event comes, proceed as error/cancelled connect.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5200 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/src/pjsip/sip_transport_tcp.c12
-rw-r--r--pjsip/src/pjsip/sip_transport_tls.c12
2 files changed, 20 insertions, 4 deletions
diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c
index d2e0a28b..222cb13f 100644
--- a/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/pjsip/src/pjsip/sip_transport_tcp.c
@@ -1470,8 +1470,16 @@ static pj_bool_t on_connect_complete(pj_activesock_t *asock,
/* Mark that pending connect() operation has completed. */
tcp->has_pending_connect = PJ_FALSE;
- if (tcp->base.is_shutdown || tcp->base.is_destroying)
- return PJ_FALSE;
+ /* If transport is being shutdown/destroyed, proceed as error connect.
+ * Note that it is important to notify application via on_data_sent()
+ * as otherwise the transport reference counter may never reach zero
+ * (see #1898).
+ */
+ if ((tcp->base.is_shutdown || tcp->base.is_destroying) &&
+ status == PJ_SUCCESS)
+ {
+ status = PJ_ECANCELLED;
+ }
/* Check connect() status */
if (status != PJ_SUCCESS) {
diff --git a/pjsip/src/pjsip/sip_transport_tls.c b/pjsip/src/pjsip/sip_transport_tls.c
index ac7ac930..5e63a2c8 100644
--- a/pjsip/src/pjsip/sip_transport_tls.c
+++ b/pjsip/src/pjsip/sip_transport_tls.c
@@ -1566,8 +1566,16 @@ static pj_bool_t on_connect_complete(pj_ssl_sock_t *ssock,
tls = (struct tls_transport*) pj_ssl_sock_get_user_data(ssock);
- if (tls->base.is_shutdown || tls->base.is_destroying)
- return PJ_FALSE;
+ /* If transport is being shutdown/destroyed, proceed as error connect.
+ * Note that it is important to notify application via on_data_sent()
+ * as otherwise the transport reference counter may never reach zero
+ * (see #1898).
+ */
+ if ((tls->base.is_shutdown || tls->base.is_destroying) &&
+ status == PJ_SUCCESS)
+ {
+ status = PJ_ECANCELLED;
+ }
/* Check connect() status */
if (status != PJ_SUCCESS) {