summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2007-12-24 19:43:36 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2007-12-24 19:43:36 +0000
commit9c1dcfea5acd1343401358df875f95af6d1e9108 (patch)
tree296d77d98ea6bd558addcd93c057b1eb7eaeda94 /main
parentf17cafdb6a9f8a64352191416926b651270f8d59 (diff)
Merged revisions 94767 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r94767 | tilghman | 2007-12-24 13:36:59 -0600 (Mon, 24 Dec 2007) | 5 lines Race: we need to wait to queue a NewChannel event until after the channel is inserted into the channel list. The reason is because some manager users immediately queue requests from the channel when they see that event and are confused when Asterisk reports no such channel. (Closes issue #11632) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@94768 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/channel.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/main/channel.c b/main/channel.c
index ebcefccc0..0de7ee838 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -728,27 +728,6 @@ struct ast_channel *ast_channel_alloc(int needqueue, int state, const char *cid_
ast_string_field_build_va(tmp, name, name_fmt, ap1, ap2);
va_end(ap1);
va_end(ap2);
-
- /* and now, since the channel structure is built, and has its name, let's call the
- * manager event generator with this Newchannel event. This is the proper and correct
- * place to make this call, but you sure do have to pass a lot of data into this func
- * to do it here!
- */
- manager_event(EVENT_FLAG_CALL, "Newchannel",
- "Channel: %s\r\n"
- "ChannelState: %d\r\n"
- "ChannelStateDesc: %s\r\n"
- "CallerIDNum: %s\r\n"
- "CallerIDName: %s\r\n"
- "AccountCode: %s\r\n"
- "Uniqueid: %s\r\n",
- tmp->name,
- state,
- ast_state2str(state),
- S_OR(cid_num, ""),
- S_OR(cid_name, ""),
- tmp->accountcode,
- tmp->uniqueid);
}
/* Reminder for the future: under what conditions do we NOT want to track cdrs on channels? */
@@ -795,6 +774,30 @@ struct ast_channel *ast_channel_alloc(int needqueue, int state, const char *cid_
AST_RWLIST_INSERT_HEAD(&channels, tmp, chan_list);
AST_RWLIST_UNLOCK(&channels);
+ /*\!note
+ * and now, since the channel structure is built, and has its name, let's
+ * call the manager event generator with this Newchannel event. This is the
+ * proper and correct place to make this call, but you sure do have to pass
+ * a lot of data into this func to do it here!
+ */
+ if (!ast_strlen_zero(name_fmt)) {
+ manager_event(EVENT_FLAG_CALL, "Newchannel",
+ "Channel: %s\r\n"
+ "ChannelState: %d\r\n"
+ "ChannelStateDesc: %s\r\n"
+ "CallerIDNum: %s\r\n"
+ "CallerIDName: %s\r\n"
+ "AccountCode: %s\r\n"
+ "Uniqueid: %s\r\n",
+ tmp->name,
+ state,
+ ast_state2str(state),
+ S_OR(cid_num, ""),
+ S_OR(cid_name, ""),
+ tmp->accountcode,
+ tmp->uniqueid);
+ }
+
return tmp;
}