[glib: 2/4] GWin32RegistryKey: ensure reqeueing works correctly
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 2/4] GWin32RegistryKey: ensure reqeueing works correctly
- Date: Mon, 2 Aug 2021 10:51:29 +0000 (UTC)
commit 6885a29428dd6f522a9486d0cbd8225f4198696e
Author: Руслан Ижбулатов <lrn1986 gmail com>
Date: Sat Jul 31 10:57:44 2021 +0000
GWin32RegistryKey: ensure reqeueing works correctly
If a key watch is renewed from the key watch callback, it results
in the callback being NULL, since we clear it after we call it.
Rearrange the function to make sure that the changes done by the
callback function are preserved properly.
gio/gwin32registrykey.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
---
diff --git a/gio/gwin32registrykey.c b/gio/gwin32registrykey.c
index d1ac09041..5e2b006dd 100644
--- a/gio/gwin32registrykey.c
+++ b/gio/gwin32registrykey.c
@@ -2425,17 +2425,20 @@ key_changed (PVOID closure,
ULONG reserved)
{
GWin32RegistryKey *key = G_WIN32_REGISTRY_KEY (closure);
+ gpointer user_data;
+ GWin32RegistryKeyWatchCallbackFunc callback;
+
+ callback = g_steal_pointer (&key->priv->callback);
+ user_data = g_steal_pointer (&key->priv->user_data);
g_free (status_block);
g_atomic_int_set (&key->priv->change_indicator, G_WIN32_KEY_CHANGED);
g_atomic_int_set (&key->priv->watch_indicator, G_WIN32_KEY_UNWATCHED);
key->priv->update_flags = G_WIN32_REGISTRY_UPDATED_NOTHING;
- if (key->priv->callback)
- key->priv->callback (key, key->priv->user_data);
+ if (callback)
+ callback (key, user_data);
- key->priv->callback = NULL;
- key->priv->user_data = NULL;
g_object_unref (key);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]