base-modem: fix modem_sync() operation handling
The mm_base_modem_sync() method is an asynchronous method that receives a callback and user data, and therefore we MUST always complete the async method calling that callback. Set that up with a GTask as usual. Also, the mm_base_modem_sync_finish() method should be implemented along with mm_base_modem_sync(), not in the source file of the caller of the async method. The finish() always depends on how the async method was implemented, in our case using a GTask.
This commit is contained in:
@@ -729,13 +729,6 @@ mm_base_manager_num_modems (MMBaseManager *self)
|
|||||||
|
|
||||||
#if defined WITH_SYSTEMD_SUSPEND_RESUME
|
#if defined WITH_SYSTEMD_SUSPEND_RESUME
|
||||||
|
|
||||||
gboolean mm_base_modem_sync_finish (MMBaseModem *self,
|
|
||||||
GAsyncResult *res,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
return g_task_propagate_boolean (G_TASK (res), error);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
base_modem_sync_ready (MMBaseModem *self,
|
base_modem_sync_ready (MMBaseModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
|
@@ -620,16 +620,26 @@ mm_base_modem_wait_link_port (MMBaseModem *self,
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mm_base_modem_sync_finish (MMBaseModem *self,
|
||||||
|
GAsyncResult *res,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
return g_task_propagate_boolean (G_TASK (res), error);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mm_base_modem_sync_ready (MMBaseModem *self,
|
sync_ready (MMBaseModem *self,
|
||||||
GAsyncResult *res)
|
GAsyncResult *res,
|
||||||
|
GTask *task)
|
||||||
{
|
{
|
||||||
g_autoptr(GError) error = NULL;
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
MM_BASE_MODEM_GET_CLASS (self)->sync_finish (self, res, &error);
|
if (!MM_BASE_MODEM_GET_CLASS (self)->sync_finish (self, res, &error))
|
||||||
if (error) {
|
g_task_return_error (task, error);
|
||||||
mm_obj_warn (self, "synchronization failed");
|
else
|
||||||
}
|
g_task_return_boolean (task, TRUE);
|
||||||
|
g_object_unref (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -637,14 +647,20 @@ mm_base_modem_sync (MMBaseModem *self,
|
|||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GTask *task;
|
||||||
|
|
||||||
|
task = g_task_new (self, NULL, callback, user_data);
|
||||||
|
|
||||||
g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync != NULL);
|
g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync != NULL);
|
||||||
g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync_finish != NULL);
|
g_assert (MM_BASE_MODEM_GET_CLASS (self)->sync_finish != NULL);
|
||||||
|
|
||||||
MM_BASE_MODEM_GET_CLASS (self)->sync (self,
|
MM_BASE_MODEM_GET_CLASS (self)->sync (self,
|
||||||
(GAsyncReadyCallback) mm_base_modem_sync_ready,
|
(GAsyncReadyCallback) sync_ready,
|
||||||
NULL);
|
task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
mm_base_modem_disable_finish (MMBaseModem *self,
|
mm_base_modem_disable_finish (MMBaseModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
|
Reference in New Issue
Block a user