diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-18 18:25:55 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-11-18 18:25:55 +0000 |
commit | 3f7c58e49af66ec3545a689b00267ea41dacaf7b (patch) | |
tree | e3cb4dc86b73c0b29908ff4869066745f0c7ba1a /apps | |
parent | ec27f636d2458e359cd0b91d275c748607697879 (diff) |
Fix a crash in the end_bridge_callback of app_dial and
app_followme which would occur at the end of an attended
transfer. The error occurred because we initially stored
a pointer to an ast_channel which then was hung up due
to a masquerade.
This commit adds a "fixup" callback to the bridge_config
structure to allow for end_bridge_callback_data to be
changed in the case that a new channel pointer is needed
for the end_bridge_callback.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@157305 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_dial.c | 5 | ||||
-rw-r--r-- | apps/app_followme.c | 6 |
2 files changed, 11 insertions, 0 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c index 5192217f1..1782e13f1 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -857,6 +857,10 @@ static void end_bridge_callback (void *data) ast_channel_unlock(chan); } +static void end_bridge_callback_data_fixup(struct ast_bridge_config *bconfig, struct ast_channel *originator, struct ast_channel *terminator) { + bconfig->end_bridge_callback_data = originator; +} + static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags *peerflags, int *continue_exec) { int res = -1; @@ -1795,6 +1799,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags config.start_sound = start_sound; config.end_bridge_callback = end_bridge_callback; config.end_bridge_callback_data = chan; + config.end_bridge_callback_data_fixup = end_bridge_callback_data_fixup; if (moh) { moh = 0; ast_moh_stop(chan); diff --git a/apps/app_followme.c b/apps/app_followme.c index 3de1a4608..fca6facc2 100644 --- a/apps/app_followme.c +++ b/apps/app_followme.c @@ -935,6 +935,11 @@ static void end_bridge_callback (void *data) ast_channel_unlock(chan); } +static void end_bridge_callback_data_fixup(struct ast_bridge_config *bconfig, struct ast_channel *originator, struct ast_channel *terminator) +{ + bconfig->end_bridge_callback_data = originator; +} + static int app_exec(struct ast_channel *chan, void *data) { struct fm_args targs; @@ -1057,6 +1062,7 @@ static int app_exec(struct ast_channel *chan, void *data) config.end_bridge_callback = end_bridge_callback; config.end_bridge_callback_data = chan; + config.end_bridge_callback_data_fixup = end_bridge_callback_data_fixup; ast_moh_stop(caller); /* Be sure no generators are left on it */ |