[svn-commits] kpfleming: branch 1.8 r370429 - /branches/1.8/main/frame.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Jul 24 11:53:41 CDT 2012


Author: kpfleming
Date: Tue Jul 24 11:53:39 2012
New Revision: 370429

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=370429
Log:
Rewrite a comment that didn't adequately explain the code it was documenting.


Modified:
    branches/1.8/main/frame.c

Modified: branches/1.8/main/frame.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/frame.c?view=diff&rev=370429&r1=370428&r2=370429
==============================================================================
--- branches/1.8/main/frame.c (original)
+++ branches/1.8/main/frame.c Tue Jul 24 11:53:39 2012
@@ -523,13 +523,18 @@
 	out->datalen = f->datalen;
 	out->samples = f->samples;
 	out->delivery = f->delivery;
-	/* Set us as having malloc'd header only, so it will eventually
-	   get freed. */
+	/* Even though this new frame was allocated from the heap, we can't mark it
+	 * with AST_MALLOCD_HDR, AST_MALLOCD_DATA and AST_MALLOCD_SRC, because that
+	 * would cause ast_frfree() to attempt to individually free each of those
+	 * under the assumption that they were separately allocated. Since this frame
+	 * was allocated in a single allocation, we'll only mark it as if the header
+	 * was heap-allocated; this will result in the entire frame being properly freed.
+	 */
 	out->mallocd = AST_MALLOCD_HDR;
 	out->offset = AST_FRIENDLY_OFFSET;
 	if (out->datalen) {
 		out->data.ptr = buf + sizeof(*out) + AST_FRIENDLY_OFFSET;
-		memcpy(out->data.ptr, f->data.ptr, out->datalen);	
+		memcpy(out->data.ptr, f->data.ptr, out->datalen);
 	} else {
 		out->data.uint32 = f->data.uint32;
 	}




More information about the svn-commits mailing list