From: Jeff Peeler Date: Fri, 6 Jun 2008 15:33:15 +0000 (+0000) Subject: This fixes a crash when LOW_MEMORY is turned on. Two allocations of the ast_rtp struc... X-Git-Tag: 1.4.22-rc1~236 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6d12307629cf8a225db59eec25cdc86e236903b6;p=thirdparty%2Fasterisk.git This fixes a crash when LOW_MEMORY is turned on. Two allocations of the ast_rtp struct that were previously allocated on the stack have been modified to use thread local storage instead. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@120863 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 6a3619ae7d..50a7f43810 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1194,6 +1194,8 @@ static void temp_pvt_cleanup(void *); /*! \brief A per-thread temporary pvt structure */ AST_THREADSTORAGE_CUSTOM(ts_temp_pvt, temp_pvt_init, temp_pvt_cleanup); +AST_THREADSTORAGE(ast_rtp_buf, ast_rtp_buf_init); + /*! \todo Move the sip_auth list to AST_LIST */ static struct sip_auth *authl = NULL; /*!< Authentication list for realm authentication */ @@ -5060,12 +5062,20 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req) } /* Initialize the temporary RTP structures we use to evaluate the offer from the peer */ +#ifdef LOW_MEMORY + newaudiortp = ast_threadstorage_get(&ast_rtp_buf, ast_rtp_alloc_size()); +#else newaudiortp = alloca(ast_rtp_alloc_size()); +#endif memset(newaudiortp, 0, ast_rtp_alloc_size()); ast_rtp_new_init(newaudiortp); ast_rtp_pt_clear(newaudiortp); +#ifdef LOW_MEMORY + newvideortp = ast_threadstorage_get(&ast_rtp_buf, ast_rtp_alloc_size()); +#else newvideortp = alloca(ast_rtp_alloc_size()); +#endif memset(newvideortp, 0, ast_rtp_alloc_size()); ast_rtp_new_init(newvideortp); ast_rtp_pt_clear(newvideortp);