mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 16:21:01 +00:00
Merge "Frame deferral: Re-queue deferred frames one-at-a-time." into 13
This commit is contained in:
@@ -1069,16 +1069,15 @@ void ast_channel_start_defer_frames(struct ast_channel *chan, int defer_hangups)
|
|||||||
|
|
||||||
void ast_channel_stop_defer_frames(struct ast_channel *chan)
|
void ast_channel_stop_defer_frames(struct ast_channel *chan)
|
||||||
{
|
{
|
||||||
|
struct ast_frame *f;
|
||||||
|
|
||||||
ast_clear_flag(ast_channel_flags(chan), AST_FLAG_DEFER_FRAMES);
|
ast_clear_flag(ast_channel_flags(chan), AST_FLAG_DEFER_FRAMES);
|
||||||
|
|
||||||
/* Move the deferred frames onto the channel read queue, ahead of other queued frames */
|
/* Move the deferred frames onto the channel read queue, ahead of other queued frames */
|
||||||
ast_queue_frame_head(chan, AST_LIST_FIRST(ast_channel_deferred_readq(chan)));
|
while ((f = AST_LIST_REMOVE_HEAD(ast_channel_deferred_readq(chan), frame_list))) {
|
||||||
/* ast_frfree will mosey down the list and free them all */
|
ast_queue_frame_head(chan, f);
|
||||||
if (!AST_LIST_EMPTY(ast_channel_deferred_readq(chan))) {
|
ast_frfree(f);
|
||||||
ast_frfree(AST_LIST_FIRST(ast_channel_deferred_readq(chan)));
|
|
||||||
}
|
}
|
||||||
/* Reset the list to be empty */
|
|
||||||
AST_LIST_HEAD_INIT_NOLOCK(ast_channel_deferred_readq(chan));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, int head, struct ast_frame *after)
|
static int __ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin, int head, struct ast_frame *after)
|
||||||
@@ -3903,10 +3902,10 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio)
|
|||||||
struct ast_frame *dup;
|
struct ast_frame *dup;
|
||||||
|
|
||||||
dup = ast_frdup(f);
|
dup = ast_frdup(f);
|
||||||
AST_LIST_INSERT_TAIL(ast_channel_deferred_readq(chan), dup, frame_list);
|
AST_LIST_INSERT_HEAD(ast_channel_deferred_readq(chan), dup, frame_list);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
AST_LIST_INSERT_TAIL(ast_channel_deferred_readq(chan), f, frame_list);
|
AST_LIST_INSERT_HEAD(ast_channel_deferred_readq(chan), f, frame_list);
|
||||||
AST_LIST_REMOVE_CURRENT(frame_list);
|
AST_LIST_REMOVE_CURRENT(frame_list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user