aboutsummaryrefslogtreecommitdiff
path: root/src/mm-plugin-base.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2009-09-08 17:31:54 -0700
committerDan Williams <dcbw@redhat.com>2009-09-08 17:34:04 -0700
commit14e5c52f78e7ad23b18b111e3271cbecad6acf3f (patch)
treeee6929c990c63139e4209a94f3e2d8c617547f4a /src/mm-plugin-base.c
parent6cf01d2ab698d05eb58bffa7e85f41024f5c0546 (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.c11
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;
}