features: Fix channel datastore access.

Found as a result of the testsuite tests/callparking test crashing.

Several calls to ast_get_chan_featuremap_config() and
ast_get_chan_features_xfer_config() did not lock the channel before
calling so the channel's datastore list was accessed without the lock's
protection.  Apparently another thread deleted a datastore on the
channel's list while the crashing thread was walking the list.  Crash at
0xdeaddead due to MALLOC_DEBUG's memory filler value as a result.

* Add missing channel locks to calls that were not already protected
as the doxygen for those calls indicates.

Change-Id: Id273b3d305cc616406c353cbc841b2b7655efaa1
This commit is contained in:
Richard Mudgett
2016-06-30 15:17:02 -05:00
parent 77c49ac1a1
commit 640fbbbe28
2 changed files with 11 additions and 4 deletions

View File

@@ -1543,8 +1543,13 @@ static void testsuite_notify_feature_success(struct ast_channel *chan, const cha
{
#ifdef TEST_FRAMEWORK
char *feature = "unknown";
struct ast_featuremap_config *featuremap = ast_get_chan_featuremap_config(chan);
struct ast_features_xfer_config *xfer = ast_get_chan_features_xfer_config(chan);
struct ast_featuremap_config *featuremap;
struct ast_features_xfer_config *xfer;
ast_channel_lock(chan);
featuremap = ast_get_chan_featuremap_config(chan);
xfer = ast_get_chan_features_xfer_config(chan);
ast_channel_unlock(chan);
if (featuremap) {
if (!strcmp(dtmf, featuremap->blindxfer)) {