]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add comments for two functions that get called with the appropriate call locked,
authorRussell Bryant <russell@russellbryant.com>
Mon, 4 Jun 2007 22:28:55 +0000 (22:28 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 4 Jun 2007 22:28:55 +0000 (22:28 +0000)
but perform operations that could result in the pvt structure getting destroyed
before returning again, causing numerous seg faults all over the module.
(inspired by issues #9642, #9569, and #9666, and the work done by stevedavies
 and mihai)

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

channels/chan_iax2.c

index b5e01c09fd650b6ed3302ef8526855b7ecebac2b..575ee7039eadb853a237cbf80e6a90945e8c8917 100644 (file)
@@ -1294,6 +1294,16 @@ static void iax2_frame_free(struct iax_frame *fr)
        iax_frame_free(fr);
 }
 
+/*!
+ * \brief Queue a frame to a call's owning asterisk channel
+ *
+ * \note This function assumes that iaxsl[callno] is locked when called.
+ *
+ * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
+ * was valid before calling it, it may no longer be valid after calling it.
+ * This function may unlock and lock the mutex associated with this callno,
+ * meaning that another thread may grab it and destroy the call.
+ */
 static int iax2_queue_frame(int callno, struct ast_frame *f)
 {
        /* Assumes lock for callno is already held... */
@@ -1577,6 +1587,14 @@ static void reload_firmware(void)
        ast_mutex_unlock(&waresl.lock);
 }
 
+/*!
+ * \note This function assumes that iaxsl[callno] is locked when called.
+ *
+ * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
+ * was valid before calling it, it may no longer be valid after calling it.
+ * This function calls iax2_queue_frame(), which may unlock and lock the mutex 
+ * associated with this callno, meaning that another thread may grab it and destroy the call.
+ */
 static int __do_deliver(void *data)
 {
        /* Just deliver the packet by using queueing.  This is called by