summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2007-06-04 22:29:43 +0000
committerRussell Bryant <russell@russellbryant.com>2007-06-04 22:29:43 +0000
commit68579570000d513380cd5d376caeba3c75167304 (patch)
tree3008c213fe3fe240757e365a321c7aae2b67708a /channels
parentef132e25e1a1da7a124dd5530dea08b8e380a11d (diff)
Merged revisions 67119 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r67119 | russell | 2007-06-04 17:28:55 -0500 (Mon, 04 Jun 2007) | 6 lines Add comments for two functions that get called with the appropriate call locked, 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/trunk@67120 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_iax2.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 2174fbdf1..0b909ceaa 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -1393,6 +1393,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... */
@@ -1664,6 +1674,14 @@ static void reload_firmware(void)
AST_LIST_UNLOCK(&firmwares);
}
+/*!
+ * \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