[asterisk-commits] kmoore: branch group/media_formats-reviewed-trunk r418395 - /team/group/media...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jul 11 16:01:55 CDT 2014


Author: kmoore
Date: Fri Jul 11 16:01:48 2014
New Revision: 418395

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=418395
Log:
media formats: Fix double unref on full cache

If the frame cache on a thread is full, the format on a frame will be
double-unreffed. This fixes the double-unref by making sure the first
unref only occurs if the frame actually goes into the TLS frame cache.

Review: https://reviewboard.asterisk.org/r/3746/

Modified:
    team/group/media_formats-reviewed-trunk/main/frame.c

Modified: team/group/media_formats-reviewed-trunk/main/frame.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/main/frame.c?view=diff&rev=418395&r1=418394&r2=418395
==============================================================================
--- team/group/media_formats-reviewed-trunk/main/frame.c (original)
+++ team/group/media_formats-reviewed-trunk/main/frame.c Fri Jul 11 16:01:48 2014
@@ -126,13 +126,13 @@
 		/* Cool, only the header is malloc'd, let's just cache those for now
 		 * to keep things simple... */
 		struct ast_frame_cache *frames;
-		if ((fr->frametype == AST_FRAME_VOICE) || (fr->frametype == AST_FRAME_VIDEO) ||
-			(fr->frametype == AST_FRAME_IMAGE)) {
-			ao2_cleanup(fr->subclass.format);
-		}
-
 		if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames))) &&
 		    (frames->size < FRAME_CACHE_MAX_SIZE)) {
+			if ((fr->frametype == AST_FRAME_VOICE) || (fr->frametype == AST_FRAME_VIDEO) ||
+				(fr->frametype == AST_FRAME_IMAGE)) {
+				ao2_cleanup(fr->subclass.format);
+			}
+
 			AST_LIST_INSERT_HEAD(&frames->list, fr, frame_list);
 			frames->size++;
 			return;




More information about the asterisk-commits mailing list