From 34e2305ae7c6aabdd27ddc454db9449c07845ee1 Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Thu, 16 Jun 2011 22:49:49 +0000 Subject: Merged revisions 324048 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r324048 | twilson | 2011-06-16 17:35:41 -0500 (Thu, 16 Jun 2011) | 8 lines Lock the channel before calling the setoption callback The channel needs to be locked before calling these callback functions. Also, sip_setoption needs to lock the pvt and a check p->rtp is non-null before using it. Review: https://reviewboard.asterisk.org/r/1220/ ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@324050 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/channel.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'main/channel.c') diff --git a/main/channel.c b/main/channel.c index 47ebe9b80..57629dbc5 100644 --- a/main/channel.c +++ b/main/channel.c @@ -7608,28 +7608,42 @@ enum ast_bridge_result ast_channel_bridge(struct ast_channel *c0, struct ast_cha /*! \brief Sets an option on a channel */ int ast_channel_setoption(struct ast_channel *chan, int option, void *data, int datalen, int block) { + int res; + + ast_channel_lock(chan); if (!chan->tech->setoption) { errno = ENOSYS; + ast_channel_unlock(chan); return -1; } if (block) ast_log(LOG_ERROR, "XXX Blocking not implemented yet XXX\n"); - return chan->tech->setoption(chan, option, data, datalen); + res = chan->tech->setoption(chan, option, data, datalen); + ast_channel_unlock(chan); + + return res; } int ast_channel_queryoption(struct ast_channel *chan, int option, void *data, int *datalen, int block) { + int res; + + ast_channel_lock(chan); if (!chan->tech->queryoption) { errno = ENOSYS; + ast_channel_unlock(chan); return -1; } if (block) ast_log(LOG_ERROR, "XXX Blocking not implemented yet XXX\n"); - return chan->tech->queryoption(chan, option, data, datalen); + res = chan->tech->queryoption(chan, option, data, datalen); + ast_channel_unlock(chan); + + return res; } struct tonepair_def { -- cgit v1.2.3