summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2023-02-20 14:57:57 -0500
committerRay Strode <rstrode@redhat.com>2023-02-22 15:02:19 -0500
commit3fbd0b9982ea70a5a914e480271a67376668a20d (patch)
tree4ec52623006626fffd6100ffb6a5ad8de8f1a76f
parent7a09a948a6435af00783c0e44582333600a792b3 (diff)
downloadgnome-online-accounts-3fbd0b9982ea70a5a914e480271a67376668a20d.tar.gz
goakerberosidentitymanager: Ensure identity-expired signal is emitted from main loop thread
Right now most of the the identity manager signals get emitted from the main thread. This makes sense, and is what a caller would typically expect (given they connect their callbacks in the main thread as well). The one exception is "identity-expired" which gets emitted from the worker thread. This commit fixes that.
-rw-r--r--src/goaidentity/goakerberosidentitymanager.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/goaidentity/goakerberosidentitymanager.c b/src/goaidentity/goakerberosidentitymanager.c
index f2d0157..e6bcd29 100644
--- a/src/goaidentity/goakerberosidentitymanager.c
+++ b/src/goaidentity/goakerberosidentitymanager.c
@@ -282,11 +282,28 @@ identity_signal_work_free (IdentitySignalWork *work)
}
static void
+do_identity_signal_expired_work (IdentitySignalWork *work)
+{
+ GoaKerberosIdentityManager *self = work->manager;
+ GoaIdentity *identity = work->identity;
+
+ g_debug ("GoaKerberosIdentityManager: identity expired");
+ _goa_identity_manager_emit_identity_expired (GOA_IDENTITY_MANAGER (self), identity);
+}
+
+static void
on_identity_expired (GoaIdentity *identity,
GoaKerberosIdentityManager *self)
{
- _goa_identity_manager_emit_identity_expired (GOA_IDENTITY_MANAGER (self),
- identity);
+ IdentitySignalWork *work;
+
+ work = identity_signal_work_new (self, identity);
+ goa_kerberos_identify_manager_send_to_context (g_main_context_default (),
+ (GSourceFunc)
+ do_identity_signal_expired_work,
+ work,
+ (GDestroyNotify)
+ identity_signal_work_free);
}
static void