From 4827933f0c4a85febb39bfed05329389f5bc64dd Mon Sep 17 00:00:00 2001 From: Ben Chan Date: Tue, 18 Mar 2014 00:06:58 -0700 Subject: [PATCH] port-serial: fix command context completion when clearing command queue This patch removes an extra invocation of g_simple_async_result_complete on the result associated with each command context in the command queue when mm_port_serial_close clears the queue. It also changes the code to complete the results in idle, which avoids a nested invocation of mm_port_serial_close. That could happen if the completion of the result calls mm_port_serial_close again (e.g. via at_command_context_free, at_sequence_context_free in mm-base-modem-at.c). The nested invocation of mm_port_serial_close could create undesirable effects (e.g. the assertion on open_count > 0 fails in case of a forced close). --- src/mm-port-serial.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mm-port-serial.c b/src/mm-port-serial.c index e41beefa..859acb78 100644 --- a/src/mm-port-serial.c +++ b/src/mm-port-serial.c @@ -1378,8 +1378,7 @@ mm_port_serial_close (MMPortSerial *self) MM_SERIAL_ERROR, MM_SERIAL_ERROR_SEND_FAILED, "Serial port is now closed"); - g_simple_async_result_complete (ctx->result); - command_context_complete_and_free (ctx, FALSE); + command_context_complete_and_free (ctx, TRUE); } g_queue_clear (self->priv->queue);