diff options
author | Dan Williams <dcbw@redhat.com> | 2009-11-29 22:46:48 -0800 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-11-29 22:46:48 -0800 |
commit | d06f8f46c68bd561b349f2db78d3caca531d3a4f (patch) | |
tree | 8aafe90fb61edd8106471840d35ae811fab3b505 | |
parent | 028c6a5e4eaf487bbb18debacbc0c56c32f8f52b (diff) |
serial: don't run commands when there's already one in-progress
If there's already a command in-progress don't try to send
another until the previous one has timed out. Also use
g_timeout_add_seconds() since precision doesn't really matter for
command timeouts.
-rw-r--r-- | src/mm-serial-port.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mm-serial-port.c b/src/mm-serial-port.c index ad955008..3abd5619 100644 --- a/src/mm-serial-port.c +++ b/src/mm-serial-port.c @@ -479,9 +479,15 @@ mm_serial_port_schedule_queue_process (MMSerialPort *self) MMSerialPortPrivate *priv = MM_SERIAL_PORT_GET_PRIVATE (self); GSource *source; - if (priv->queue_schedule) + if (priv->timeout_id) { + /* A command is already in progress */ + return; + } + + if (priv->queue_schedule) { /* Already scheduled */ return; + } source = g_idle_source_new (); g_source_set_closure (source, g_cclosure_new_object (G_CALLBACK (mm_serial_port_queue_process), G_OBJECT (self))); @@ -568,7 +574,7 @@ mm_serial_port_queue_process (gpointer data) if (mm_serial_port_send_command (self, info->command, &error)) { GSource *source; - source = g_timeout_source_new (info->timeout); + source = g_timeout_source_new_seconds (info->timeout); g_source_set_closure (source, g_cclosure_new_object (G_CALLBACK (mm_serial_port_timed_out), G_OBJECT (self))); g_source_attach (source, NULL); priv->timeout_id = g_source_get_id (source); @@ -896,7 +902,7 @@ internal_queue_command (MMSerialPort *self, info = g_slice_new0 (MMQueueData); info->command = g_strdup (command); info->cached = cached; - info->timeout = timeout_seconds * 1000; + info->timeout = timeout_seconds; info->callback = callback; info->user_data = user_data; |