mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	Merge "Frame deferral: Re-queue deferred frames one-at-a-time."
This commit is contained in:
		| @@ -1070,16 +1070,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) | ||||||
| @@ -3901,10 +3900,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