Fix another issue that was causing crashes in chanspy. This introduces a new

datastore callback, called chan_fixup().  The concept is exactly like the
fixup callback that is used in the channel technology interface.  This callback
gets called when the owning channel changes due to a masquerade.  Before this
was introduced, if a masquerade happened on a channel being spyed on, the
channel pointer in the datastore became invalid.

(closes issue #12187)
(reported by, and lots of testing from atis)
(props to file for the help with ideas)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@108583 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2008-03-13 21:38:16 +00:00
parent a10f524dfb
commit efa3b46cdf
3 changed files with 32 additions and 1 deletions

View File

@@ -3494,8 +3494,14 @@ int ast_do_masquerade(struct ast_channel *original)
ast_app_group_update(clone, original);
/* Move data stores over */
if (AST_LIST_FIRST(&clone->datastores))
if (AST_LIST_FIRST(&clone->datastores)) {
struct ast_datastore *ds;
AST_LIST_APPEND_LIST(&original->datastores, &clone->datastores, entry);
AST_LIST_TRAVERSE(&original->datastores, ds, entry) {
if (ds->info->chan_fixup)
ds->info->chan_fixup(ds->data, clone, original);
}
}
clone_variables(original, clone);
/* Presense of ADSI capable CPE follows clone */