From: Andrew Sayers <kernel.org@pileofstuff.org>
To: linux-bluetooth@vger.kernel.org
Cc: luiz.dentz@gmail.com, pav@iki.fi, frederic.danis@collabora.com,
Andrew Sayers <kernel.org@pileofstuff.org>
Subject: [PATCH BlueZ 1/3] obexd: Pass at_(un)register value to logind callbacks
Date: Tue, 3 Jun 2025 16:13:29 +0100 [thread overview]
Message-ID: <20250603151651.1080923-2-kernel.org@pileofstuff.org> (raw)
In-Reply-To: <20250603151651.1080923-1-kernel.org@pileofstuff.org>
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@pileofstuff.org>
---
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;
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;
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)
{
--
2.49.0
next prev parent reply other threads:[~2025-06-03 15:17 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-03 15:13 [PATCH BlueZ 0/3] pbap: use the public DBus connection Andrew Sayers
2025-06-03 15:13 ` Andrew Sayers [this message]
2025-06-03 16:01 ` [PATCH BlueZ 1/3] obexd: Pass at_(un)register value to logind callbacks Luiz Augusto von Dentz
2025-06-04 9:03 ` Andrew Sayers
2025-06-03 16:43 ` pbap: use the public DBus connection bluez.test.bot
2025-06-06 16:55 ` [PATCH BlueZ 1/3] obexd: Pass at_(un)register value to logind callbacks Frédéric Danis
2025-06-03 15:13 ` [PATCH BlueZ 2/3] pbap: use the public DBus connection Andrew Sayers
2025-06-03 15:13 ` [PATCH BlueZ 3/3] Revert "obexd: Support creating private system/session bus connections" Andrew Sayers
2025-06-06 16:58 ` [PATCH BlueZ 0/3] pbap: use the public DBus connection Frédéric Danis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250603151651.1080923-2-kernel.org@pileofstuff.org \
--to=kernel.org@pileofstuff.org \
--cc=frederic.danis@collabora.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
--cc=pav@iki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox