]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8761 #resolve [Memory leak in FreeSWITCH]
authorAnthony Minessale <anthm@freeswitch.org>
Sat, 6 Aug 2016 16:49:21 +0000 (11:49 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Sat, 6 Aug 2016 16:49:21 +0000 (11:49 -0500)
libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/tport/tport_type_ws.c
libs/sofia-sip/libsofia-sip-ua/tport/tport_ws.h
libs/sofia-sip/libsofia-sip-ua/tport/ws.c
libs/sofia-sip/libsofia-sip-ua/tport/ws.h

index b9f2e8ad18c423763b1dd28d8e15f9d34f19ec4d..b824aceab01b4cd0e55794b13f1fb25c9d34d099 100644 (file)
@@ -1 +1 @@
-Wed Jul 27 14:15:49 CDT 2016
+Sat Aug  6 11:48:53 CDT 2016
index 050b2f8364f5e0c4331fc88c877db8f01463faca..1390689513d2b6380ce0e1f78a82d092784bddb0 100644 (file)
@@ -461,6 +461,7 @@ int tport_ws_init_secondary(tport_t *self, int socket, int accepted,
   tport_ws_t *wstp = (tport_ws_t *)self;
 
   self->tp_has_connection = 1;
+  self->tp_params->tpp_keepalive = 5000;
 
   /* override the default 30 minute timeout on tport connections */
   self->tp_params->tpp_idle = UINT_MAX;
@@ -496,7 +497,7 @@ int tport_ws_init_secondary(tport_t *self, int socket, int accepted,
   wstp->ws_initialized = 1;
   self->tp_pre_framed = 1;
   
-
+  tport_set_secondary_timer(self);
 
   return 0;
 }
@@ -592,6 +593,20 @@ int tport_ws_next_timer(tport_t *self,
                         su_time_t *return_target,
                         char const **return_why)
 {
+       tport_ws_t *wstp = (tport_ws_t *)self;
+
+       if (establish_logical_layer(&wstp->ws) < 0) {
+               if (wstp->tos++ == 1) {
+                       tport_close(self);
+                       SU_DEBUG_7(("%s(%p): %s to " TPN_FORMAT "%s\n",
+                                               __func__, (void *)self,
+                                               "timeout establishing connection\n", TPN_ARGS(self->tp_name), ""));
+                       return -1;
+               }
+       } else {
+               self->tp_params->tpp_keepalive = 30000;
+       }
+
   return
     tport_next_recv_timeout(self, return_target, return_why) |
     tport_next_keepalive(self, return_target, return_why);
index d48101e5cbe31a9f050401e103a0f28dad570735..4e2e0f474d8b94ec3625837ad8a963f6fba11d2c 100644 (file)
@@ -59,6 +59,7 @@ typedef struct tport_ws_s {
   char     wstp_buffer[65536];
   size_t   wstp_buflen;
   SU_S8_T  ws_initialized;
+  unsigned char tos;
   unsigned ws_secure:1;
   unsigned:0;
 } tport_ws_t;
index 7fe9f182bf5f4bc99048b028709d4273088c14e2..5e5bbd638d1e1e8005794eb489d73c260910a969 100644 (file)
@@ -500,7 +500,7 @@ static int restore_socket(ws_socket_t sock)
 #endif
 
 
-static int establish_logical_layer(wsh_t *wsh)
+int establish_logical_layer(wsh_t *wsh)
 {
 
        if (!wsh->sanity) {
index 045ff32accbc610062caf7b172f21870dc880162..83a6890cca0cb214709800fe70275ce87281d630 100644 (file)
@@ -119,7 +119,7 @@ typedef struct wsh_s {
 ssize_t ws_send_buf(wsh_t *wsh, ws_opcode_t oc);
 ssize_t ws_feed_buf(wsh_t *wsh, void *data, size_t bytes);
 
-
+int establish_logical_layer(wsh_t *wsh);
 ssize_t ws_raw_read(wsh_t *wsh, void *data, size_t bytes, int block);
 ssize_t ws_raw_write(wsh_t *wsh, void *data, size_t bytes);
 ssize_t ws_read_frame(wsh_t *wsh, ws_opcode_t *oc, uint8_t **data);