AST_LIST_TRAVERSE(&chan->spies->list, spy, list) {
struct ast_channel_spy_queue *queue;
+ struct ast_frame *duped_fr;
ast_mutex_lock(&spy->lock);
break;
}
}
- AST_LIST_INSERT_TAIL(&queue->list, ast_frdup(translated_frame), frame_list);
+ duped_fr = ast_frdup(translated_frame);
} else {
if (f->subclass != queue->format) {
ast_log(LOG_WARNING, "Spy '%s' on channel '%s' wants format '%s', but frame is '%s', dropping\n",
ast_mutex_unlock(&spy->lock);
continue;
}
- AST_LIST_INSERT_TAIL(&queue->list, ast_frdup(f), frame_list);
+ duped_fr = ast_frdup(f);
}
+ AST_LIST_INSERT_TAIL(&queue->list, duped_fr, frame_list);
+
queue->samples += f->samples;
if (queue->samples > SPY_QUEUE_SAMPLE_LIMIT) {