mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 18:19:30 +00:00
automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@19391 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
77
channel.c
77
channel.c
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 1999 - 2005, Digium, Inc.
|
||||
* Copyright (C) 1999 - 2006, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
*
|
||||
@@ -1135,7 +1135,6 @@ static void queue_frame_to_spies(struct ast_channel *chan, struct ast_frame *f,
|
||||
struct ast_frame *translated_frame = NULL;
|
||||
struct ast_channel_spy *spy;
|
||||
struct ast_channel_spy_queue *queue;
|
||||
struct ast_channel_spy_queue *other_queue;
|
||||
struct channel_spy_trans *trans;
|
||||
struct ast_frame *last;
|
||||
|
||||
@@ -1197,48 +1196,42 @@ static void queue_frame_to_spies(struct ast_channel *chan, struct ast_frame *f,
|
||||
|
||||
if (queue->samples > SPY_QUEUE_SAMPLE_LIMIT) {
|
||||
if (ast_test_flag(spy, CHANSPY_TRIGGER_MODE) != CHANSPY_TRIGGER_NONE) {
|
||||
other_queue = (dir == SPY_WRITE) ? &spy->read_queue : &spy->write_queue;
|
||||
|
||||
if (other_queue->samples == 0) {
|
||||
switch (ast_test_flag(spy, CHANSPY_TRIGGER_MODE)) {
|
||||
case CHANSPY_TRIGGER_READ:
|
||||
if (dir == SPY_WRITE) {
|
||||
ast_set_flag(spy, CHANSPY_TRIGGER_WRITE);
|
||||
ast_clear_flag(spy, CHANSPY_TRIGGER_READ);
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Switching spy '%s' on '%s' to write-trigger mode\n",
|
||||
spy->type, chan->name);
|
||||
}
|
||||
break;
|
||||
case CHANSPY_TRIGGER_WRITE:
|
||||
if (dir == SPY_READ) {
|
||||
ast_set_flag(spy, CHANSPY_TRIGGER_READ);
|
||||
ast_clear_flag(spy, CHANSPY_TRIGGER_WRITE);
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Switching spy '%s' on '%s' to read-trigger mode\n",
|
||||
spy->type, chan->name);
|
||||
}
|
||||
break;
|
||||
switch (ast_test_flag(spy, CHANSPY_TRIGGER_MODE)) {
|
||||
case CHANSPY_TRIGGER_READ:
|
||||
if (dir == SPY_WRITE) {
|
||||
ast_set_flag(spy, CHANSPY_TRIGGER_WRITE);
|
||||
ast_clear_flag(spy, CHANSPY_TRIGGER_READ);
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Switching spy '%s' on '%s' to write-trigger mode\n",
|
||||
spy->type, chan->name);
|
||||
}
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Triggering queue flush for spy '%s' on '%s'\n",
|
||||
spy->type, chan->name);
|
||||
ast_set_flag(spy, CHANSPY_TRIGGER_FLUSH);
|
||||
ast_cond_signal(&spy->trigger);
|
||||
ast_mutex_unlock(&spy->lock);
|
||||
continue;
|
||||
break;
|
||||
case CHANSPY_TRIGGER_WRITE:
|
||||
if (dir == SPY_READ) {
|
||||
ast_set_flag(spy, CHANSPY_TRIGGER_READ);
|
||||
ast_clear_flag(spy, CHANSPY_TRIGGER_WRITE);
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Switching spy '%s' on '%s' to read-trigger mode\n",
|
||||
spy->type, chan->name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Triggering queue flush for spy '%s' on '%s'\n",
|
||||
spy->type, chan->name);
|
||||
ast_set_flag(spy, CHANSPY_TRIGGER_FLUSH);
|
||||
ast_cond_signal(&spy->trigger);
|
||||
} else {
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Spy '%s' on channel '%s' %s queue too long, dropping frames\n",
|
||||
spy->type, chan->name, (dir == SPY_READ) ? "read" : "write");
|
||||
while (queue->samples > SPY_QUEUE_SAMPLE_LIMIT) {
|
||||
struct ast_frame *drop = queue->head;
|
||||
|
||||
queue->samples -= drop->samples;
|
||||
queue->head = drop->next;
|
||||
ast_frfree(drop);
|
||||
}
|
||||
}
|
||||
|
||||
if (option_debug)
|
||||
ast_log(LOG_DEBUG, "Spy '%s' on channel '%s' %s queue too long, dropping frames\n",
|
||||
spy->type, chan->name, (dir == SPY_READ) ? "read" : "write");
|
||||
while (queue->samples > SPY_QUEUE_SAMPLE_LIMIT) {
|
||||
struct ast_frame *drop = queue->head;
|
||||
|
||||
queue->samples -= drop->samples;
|
||||
queue->head = drop->next;
|
||||
ast_frfree(drop);
|
||||
}
|
||||
} else {
|
||||
switch (ast_test_flag(spy, CHANSPY_TRIGGER_MODE)) {
|
||||
|
Reference in New Issue
Block a user