Re: [PATCH BlueZ 1/3] obexd: Pass at_(un)register value to logind callbacks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Andrew,

On 03/06/2025 17:13, Andrew Sayers wrote:
Logind (un)registers callbacks that it calls when the user's state changes.
Callbacks may also be called during (un)registration.
Clients may need to handle those initial/final calls specially.

Pass an argument indicating whether this is being called during
(un)registration, and modify existing callbacks to ignore that argument.

Signed-off-by: Andrew Sayers <kernel.org@xxxxxxxxxxxxxxx>
---
  obexd/client/pbap.c       |  6 ++++--
  obexd/plugins/bluetooth.c |  6 ++++--
  obexd/src/logind.c        | 14 +++++++-------
  obexd/src/logind.h        |  8 ++++----
  4 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c
index 51b523592..64bb8ff72 100644
--- a/obexd/client/pbap.c
+++ b/obexd/client/pbap.c
@@ -1455,8 +1455,9 @@ static struct obc_driver pbap = {
  	.remove = pbap_remove
  };
-static int pbap_init_cb(void)
+static int pbap_init_cb(gboolean at_register)
  {
+	(void)at_register;
  	int err;
Building on Ubuntu 24.04 I got the following error:

obexd/client/pbap.c:1461:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
 1461 |         int err;
      |         ^~~

DBG("");
@@ -1482,8 +1483,9 @@ static int pbap_init_cb(void)
  	return 0;
  }
-static void pbap_exit_cb(void)
+static void pbap_exit_cb(gboolean at_unregister)
  {
+	(void)at_unregister;
  	DBG("");
g_dbus_remove_watch(system_conn, listener_id);
diff --git a/obexd/plugins/bluetooth.c b/obexd/plugins/bluetooth.c
index 7ff27a8a8..ad37e636d 100644
--- a/obexd/plugins/bluetooth.c
+++ b/obexd/plugins/bluetooth.c
@@ -427,8 +427,9 @@ static const struct obex_transport_driver driver = {
static unsigned int listener_id = 0; -static int bluetooth_init_cb(void)
+static int bluetooth_init_cb(gboolean at_register)
  {
+	(void)at_register;
  	connection = g_dbus_setup_private(DBUS_BUS_SYSTEM, NULL, NULL);
  	if (connection == NULL)
  		return -EPERM;
@@ -439,8 +440,9 @@ static int bluetooth_init_cb(void)
  	return obex_transport_driver_register(&driver);
  }
-static void bluetooth_exit_cb(void)
+static void bluetooth_exit_cb(gboolean at_unregister)
  {
+	(void)at_unregister;
  	GSList *l;
And:

obexd/plugins/bluetooth.c: In function ‘bluetooth_exit_cb’:
obexd/plugins/bluetooth.c:446:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
  446 |         GSList *l;
      |         ^~~~~~

g_dbus_remove_watch(connection, listener_id);
diff --git a/obexd/src/logind.c b/obexd/src/logind.c
index a0eb62b1e..b4279b209 100644
--- a/obexd/src/logind.c
+++ b/obexd/src/logind.c
@@ -43,13 +43,13 @@ static void call_init_cb(gpointer data, gpointer user_data)
  {
  	int res;
- res = ((struct callback_pair *)data)->init_cb();
+	res = ((struct callback_pair *)data)->init_cb(FALSE);
  	if (res)
  		*(int *)user_data = res;
  }
  static void call_exit_cb(gpointer data, gpointer user_data)
  {
-	((struct callback_pair *)data)->exit_cb();
+	((struct callback_pair *)data)->exit_cb(FALSE);
  }
static int update(void)
@@ -229,7 +229,7 @@ int logind_register(logind_init_cb init_cb, logind_exit_cb exit_cb)
  	struct callback_pair *cbs;
if (!monitoring_enabled)
-		return init_cb();
+		return init_cb(TRUE);
  	if (callbacks == NULL) {
  		int res;
@@ -237,23 +237,23 @@ int logind_register(logind_init_cb init_cb, logind_exit_cb exit_cb)
  		if (res) {
  			error("logind_init(): %s - login detection disabled",
  				strerror(-res));
-			return init_cb();
+			return init_cb(TRUE);
  		}
  	}
  	cbs = g_new(struct callback_pair, 1);
  	cbs->init_cb = init_cb;
  	cbs->exit_cb = exit_cb;
  	callbacks = g_slist_prepend(callbacks, cbs);
-	return active ? init_cb() : 0;
+	return active ? init_cb(TRUE) : 0;
  }
  void logind_unregister(logind_init_cb init_cb, logind_exit_cb exit_cb)
  {
  	GSList *cb_node;
if (!monitoring_enabled)
-		return exit_cb();
+		return exit_cb(TRUE);
  	if (active)
-		exit_cb();
+		exit_cb(TRUE);
  	cb_node = g_slist_find_custom(callbacks, init_cb, find_cb);
  	if (cb_node != NULL)
  		callbacks = g_slist_delete_link(callbacks, cb_node);
diff --git a/obexd/src/logind.h b/obexd/src/logind.h
index eb3ff8d7b..3cdb03338 100644
--- a/obexd/src/logind.h
+++ b/obexd/src/logind.h
@@ -8,8 +8,8 @@
   *
   */
-typedef int (*logind_init_cb)(void);
-typedef void (*logind_exit_cb)(void);
+typedef int (*logind_init_cb)(gboolean at_register);
+typedef void (*logind_exit_cb)(gboolean at_unregister);
#ifdef SYSTEMD @@ -22,12 +22,12 @@ int logind_set(gboolean enabled);
  static inline int logind_register(logind_init_cb init_cb,
  					logind_exit_cb exit_cb)
  {
-	return init_cb();
+	return init_cb(TRUE);
  }
  static inline void logind_unregister(logind_init_cb init_cb,
  					logind_exit_cb exit_cb)
  {
-	return exit_cb();
+	return exit_cb(TRUE);
  }
  static inline int logind_set(gboolean enabled)
  {

--
Frédéric Danis
Senior Software Engineer

Collabora Ltd.
Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, United Kingdom
Registered in England & Wales, no. 5513718





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux