[glib: 3/4] GWin32AppInfo: re-trigger registry watcher from the callback




commit 4e9e7bfd34f33c66a4d25a082f91e9e2a3e231a8
Author: Руслан Ижбулатов <lrn1986 gmail com>
Date:   Sat Jul 31 11:01:06 2021 +0000

    GWin32AppInfo: re-trigger registry watcher from the callback
    
    To ensure that the watch is properly re-set every time, call
    watch_keys() from the watch callback. Previously the watch was only
    renewed after a data update was done in a worker thread, which made
    no sense, since the update function was implemented in such a way
    that it can (and should) be re-triggered on each key change, until
    the changes stop coming, and that can only happen if we renew
    the registry watcher right away.

 gio/gwin32appinfo.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
---
diff --git a/gio/gwin32appinfo.c b/gio/gwin32appinfo.c
index 5403225e2..4074f402c 100644
--- a/gio/gwin32appinfo.c
+++ b/gio/gwin32appinfo.c
@@ -3828,6 +3828,9 @@ update_registry_data (void)
   return;
 }
 
+static void
+watch_keys (void);
+
 /* This function is called when any of our registry watchers detect
  * changes in the registry.
  */
@@ -3835,6 +3838,7 @@ static void
 keys_updated (GWin32RegistryKey  *key,
               gpointer            user_data)
 {
+  watch_keys ();
   /* Indicate the tree as not up-to-date, push a new job for the AppInfo thread */
   g_atomic_int_inc (&gio_win32_appinfo_update_counter);
   /* We don't use the data pointer, but it must be non-NULL */
@@ -4029,7 +4033,6 @@ gio_win32_appinfo_init (gboolean do_wait)
       g_mutex_lock (&gio_win32_appinfo_mutex);
       while (g_atomic_int_get (&gio_win32_appinfo_update_counter) > 0)
         g_cond_wait (&gio_win32_appinfo_cond, &gio_win32_appinfo_mutex);
-      watch_keys ();
       g_mutex_unlock (&gio_win32_appinfo_mutex);
     }
 }


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