diff options
author | Dan Williams <dcbw@redhat.com> | 2009-09-08 17:31:54 -0700 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-09-08 17:34:04 -0700 |
commit | 14e5c52f78e7ad23b18b111e3271cbecad6acf3f (patch) | |
tree | ee6929c990c63139e4209a94f3e2d8c617547f4a /src/mm-plugin-base.c | |
parent | 6cf01d2ab698d05eb58bffa7e85f41024f5c0546 (diff) |
core: don't allow concurrent flashes on the same device
Previously, a few operations (like disable) could trigger a modem
flash in parallel with another flash. That's wrong, don't allow
that. At the same time, add in finer-grained error checking on
serial port speed operations, and fix a GSM generic bug that would
send the POWER_UP string on disable.
Diffstat (limited to 'src/mm-plugin-base.c')
-rw-r--r-- | src/mm-plugin-base.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/mm-plugin-base.c b/src/mm-plugin-base.c index 3b219302..7adbe2a2 100644 --- a/src/mm-plugin-base.c +++ b/src/mm-plugin-base.c @@ -205,6 +205,9 @@ dispose (GObject *object) { MMPluginBaseSupportsTaskPrivate *priv = MM_PLUGIN_BASE_SUPPORTS_TASK_GET_PRIVATE (object); + if (MM_IS_SERIAL_PORT (priv->port)) + mm_serial_port_flash_cancel (MM_SERIAL_PORT (priv->port)); + g_object_unref (priv->port); g_object_unref (priv->physdev); g_free (priv->driver); @@ -459,12 +462,8 @@ parse_response (MMSerialPort *port, } static void -flash_done (MMSerialPort *port, gpointer user_data) +flash_done (MMSerialPort *port, GError *error, gpointer user_data) { - MMPluginBaseSupportsTask *task = MM_PLUGIN_BASE_SUPPORTS_TASK (user_data); - MMPluginBaseSupportsTaskPrivate *task_priv = MM_PLUGIN_BASE_SUPPORTS_TASK_GET_PRIVATE (task); - - task_priv->probe_id = 0; mm_serial_port_queue_command (port, "+GCAP", 3, parse_response, user_data); } @@ -506,7 +505,7 @@ mm_plugin_base_probe_port (MMPluginBase *self, g_debug ("(%s): probe requested by plugin '%s'", name, priv->name); task_priv->probe_port = serial; - task_priv->probe_id = mm_serial_port_flash (serial, 100, flash_done, task); + mm_serial_port_flash (serial, 100, flash_done, task); return TRUE; } |