diff options
author | automerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-07-05 14:26:28 +0000 |
---|---|---|
committer | automerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-07-05 14:26:28 +0000 |
commit | 8dff1fbd4efe6cfa057cd5720dea82f38971e9c1 (patch) | |
tree | 29607099fc9cd4bb9ed8f96fb0128b36b35d52a1 | |
parent | 16ed6b35515f32850ef68a1f0131f1e2cfce37d8 (diff) |
automerge commit
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2-netsec@73366 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | apps/app_chanspy.c | 3 | ||||
-rw-r--r-- | apps/app_queue.c | 3 | ||||
-rw-r--r-- | channel.c | 13 | ||||
-rw-r--r-- | channels/chan_local.c | 6 |
4 files changed, 11 insertions, 14 deletions
diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c index 6b30842b8..7510c68e9 100644 --- a/apps/app_chanspy.c +++ b/apps/app_chanspy.c @@ -329,9 +329,10 @@ static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int ast_deactivate_generator(chan); + csth.spy.status = CHANSPY_DONE; + ast_mutex_lock(&csth.spy.lock); if (csth.spy.chan) { - csth.spy.status = CHANSPY_DONE; ast_mutex_lock(&csth.spy.chan->lock); ast_channel_spy_remove(csth.spy.chan, &csth.spy); ast_mutex_unlock(&csth.spy.chan->lock); diff --git a/apps/app_queue.c b/apps/app_queue.c index 730c1153f..cedf9983e 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -3627,8 +3627,7 @@ static int manager_queues_status( struct mansession *s, struct message *m ) /* List queue properties */ if (ast_strlen_zero(queuefilter) || !strcmp(q->name, queuefilter)) { - if(q->callscompleted > 0) - sl = 100*((float)q->callscompletedinsl/(float)q->callscompleted); + sl = ((q->callscompleted > 0) ? 100*((float)q->callscompletedinsl/(float)q->callscompleted) : 0); ast_cli(s->fd, "Event: QueueParams\r\n" "Queue: %s\r\n" "Max: %d\r\n" @@ -1047,21 +1047,19 @@ static void spy_cleanup(struct ast_channel *chan) /* Detach a spy from it's channel */ static void spy_detach(struct ast_channel_spy *spy, struct ast_channel *chan) { - ast_mutex_lock(&spy->lock); - /* We only need to poke them if they aren't already done */ if (spy->status != CHANSPY_DONE) { + ast_mutex_lock(&spy->lock); spy->status = CHANSPY_STOP; spy->chan = NULL; if (ast_test_flag(spy, CHANSPY_TRIGGER_MODE) != CHANSPY_TRIGGER_NONE) ast_cond_signal(&spy->trigger); + ast_mutex_unlock(&spy->lock); } /* Print it out while we still have a lock so the structure can't go away (if signalled above) */ ast_log(LOG_DEBUG, "Spy %s removed from channel %s\n", spy->type, chan->name); - ast_mutex_unlock(&spy->lock); - return; } @@ -1073,13 +1071,10 @@ void ast_channel_spy_stop_by_type(struct ast_channel *chan, const char *type) return; AST_LIST_TRAVERSE_SAFE_BEGIN(&chan->spies->list, spy, list) { - ast_mutex_lock(&spy->lock); if ((spy->type == type) && (spy->status == CHANSPY_RUNNING)) { - ast_mutex_unlock(&spy->lock); AST_LIST_REMOVE_CURRENT(&chan->spies->list, list); spy_detach(spy, chan); - } else - ast_mutex_unlock(&spy->lock); + } } AST_LIST_TRAVERSE_SAFE_END spy_cleanup(chan); @@ -1198,6 +1193,8 @@ static void queue_frame_to_spies(struct ast_channel *chan, struct ast_frame *f, trans = (dir == SPY_READ) ? &chan->spies->read_translator : &chan->spies->write_translator; AST_LIST_TRAVERSE(&chan->spies->list, spy, list) { + if (spy->status != CHANSPY_RUNNING) + continue; ast_mutex_lock(&spy->lock); queue = (dir == SPY_READ) ? &spy->read_queue : &spy->write_queue; diff --git a/channels/chan_local.c b/channels/chan_local.c index 9dceded67..9a0f8d61b 100644 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -391,10 +391,10 @@ static int local_call(struct ast_channel *ast, char *dest, int timeout) } } - p->launchedpbx = 1; - /* Start switch on sub channel */ - res = ast_pbx_start(p->chan); + if (!(res = ast_pbx_start(p->chan))) + p->launchedpbx = 1; + ast_mutex_unlock(&p->lock); return res; } |