diff mbox series

[v2,4/6] qmimodem: Use l_idle and l_timeout for service creation

Message ID 20240221221725.185480-4-steve.schrock@getcruise.com (mailing list archive)
State Accepted
Commit a42c37eee09e6c77b0a9cc223509bc3b0e635756
Headers show
Series [v2,1/6] qmimodem: Use l_queue_remove_if to eliminate double lookup | expand

Commit Message

Steve Schrock Feb. 21, 2024, 10:17 p.m. UTC
---
 drivers/qmimodem/qmi.c | 42 +++++++++++++++++++-----------------------
 1 file changed, 19 insertions(+), 23 deletions(-)
diff mbox series

Patch

diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c
index 1e127d60..150fd343 100644
--- a/drivers/qmimodem/qmi.c
+++ b/drivers/qmimodem/qmi.c
@@ -1930,7 +1930,7 @@  struct service_create_data {
 	qmi_create_func_t func;
 	void *user_data;
 	qmi_destroy_func_t destroy;
-	guint timeout;
+	struct l_timeout *timeout;
 	uint16_t tid;
 };
 
@@ -1938,10 +1938,8 @@  static void service_create_data_free(gpointer user_data)
 {
 	struct service_create_data *data = user_data;
 
-	if (data->timeout) {
-		g_source_remove(data->timeout);
-		data->timeout = 0;
-	}
+	if (data->timeout)
+		l_timeout_remove(data->timeout);
 
 	if (data->destroy)
 		data->destroy(data->user_data);
@@ -1956,19 +1954,18 @@  struct service_create_shared_data {
 	qmi_create_func_t func;
 	void *user_data;
 	qmi_destroy_func_t destroy;
-	guint timeout;
+	struct l_idle *idle;
 };
 
-static gboolean service_create_shared_reply(gpointer user_data)
+static void service_create_shared_reply(struct l_idle *idle, void *user_data)
 {
 	struct service_create_shared_data *data = user_data;
 
-	data->timeout = 0;
+	l_idle_remove(data->idle);
+	data->idle = NULL;
 	data->func(data->service, data->user_data);
 
 	__qmi_device_discovery_complete(data->device, &data->super);
-
-	return FALSE;
 }
 
 static void service_create_shared_pending_reply(struct qmi_device *device,
@@ -1983,26 +1980,29 @@  static void service_create_shared_pending_reply(struct qmi_device *device,
 		struct service_create_shared_data *shared_data = l->data;
 
 		shared_data->service = qmi_service_ref(service);
-		shared_data->timeout = g_timeout_add(
-				0, service_create_shared_reply, shared_data);
+		shared_data->idle = l_idle_create(service_create_shared_reply,
+							shared_data, NULL);
 	}
 
 	g_list_free(*shared);
 	l_free(shared);
 }
 
-static gboolean service_create_reply(gpointer user_data)
+static void service_create_reply(struct l_timeout *timeout, void *user_data)
 {
 	struct service_create_data *data = user_data;
 	struct qmi_device *device = data->device;
 	struct qmi_request *req;
 
+	DBG("");
+
 	service_create_shared_pending_reply(device, data->type, NULL);
 
 	/* remove request from queues */
 	req = find_control_request(device, data->tid);
 
-	data->timeout = 0;
+	l_timeout_remove(data->timeout);
+	data->timeout = NULL;
 
 	if (data->func)
 		data->func(NULL, data->user_data);
@@ -2011,8 +2011,6 @@  static gboolean service_create_reply(gpointer user_data)
 
 	if (req)
 		__request_free(req);
-
-	return FALSE;
 }
 
 static void service_create_callback(uint16_t message, uint16_t length,
@@ -2115,7 +2113,7 @@  static bool service_create(struct qmi_device *device,
 			service_create_callback, data);
 
 	data->tid = __request_submit(device, req);
-	data->timeout = g_timeout_add_seconds(8, service_create_reply, data);
+	data->timeout = l_timeout_create(8, service_create_reply, data, NULL);
 
 	__qmi_device_discovery_started(device, &data->super);
 
@@ -2130,10 +2128,8 @@  static void service_create_shared_data_free(gpointer user_data)
 {
 	struct service_create_shared_data *data = user_data;
 
-	if (data->timeout) {
-		g_source_remove(data->timeout);
-		data->timeout = 0;
-	}
+	if (data->idle)
+		l_idle_remove(data->idle);
 
 	qmi_service_unref(data->service);
 
@@ -2190,8 +2186,8 @@  bool qmi_service_create_shared(struct qmi_device *device, uint16_t type,
 
 		if (!(type_val & 0x80000000)) {
 			data->service = qmi_service_ref(service);
-			data->timeout = g_timeout_add(
-					0, service_create_shared_reply, data);
+			data->idle = l_idle_create(service_create_shared_reply,
+							data, NULL);
 		} else
 			*l = g_list_prepend(*l, data);