Merge fix to not leak the stringfields of a thread speicif sip_pvt. This also
authorRussell Bryant <russell@russellbryant.com>
Thu, 19 Oct 2006 01:04:18 +0000 (01:04 +0000)
committerRussell Bryant <russell@russellbryant.com>
Thu, 19 Oct 2006 01:04:18 +0000 (01:04 +0000)
includes the fix not to leak the actual sip_pvt.

Merged revisions 45622 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r45622 | russell | 2006-10-18 20:59:51 -0400 (Wed, 18 Oct 2006) | 2 lines

Don't leak the actual thread-specific sip_pvt struct

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@45624 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 18b2325..c23f54a 100644 (file)
@@ -1142,8 +1142,10 @@ static struct ast_register_list {
        int recheck;
 } regl;
 
+static void temp_pvt_cleanup(void *);
+
 /*! \brief A per-thread temporary pvt structure */
-AST_THREADSTORAGE(ts_temp_pvt);
+AST_THREADSTORAGE_CUSTOM(ts_temp_pvt, NULL, temp_pvt_cleanup);
 
 /*! \todo Move the sip_auth list to AST_LIST */
 static struct sip_auth *authl = NULL;          /*!< Authentication list for realm authentication */
@@ -5530,6 +5532,15 @@ static int __transmit_response(struct sip_pvt *p, const char *msg, const struct
        return send_response(p, &resp, reliable, seqno);
 }
 
+static void temp_pvt_cleanup(void *data)
+{
+       struct sip_pvt *p = data;
+
+       ast_string_field_free_pools(p);
+
+       free(data);
+}
+
 /*! \brief Transmit response, no retransmits, using a temporary pvt structure */
 static int transmit_response_using_temp(ast_string_field callid, struct sockaddr_in *sin, int useglobal_nat, const int intended_method, const struct sip_request *req, const char *msg)
 {