Fix the long standing bug which caused newly installed GConf

applications to not pick up their default configuration values unless
gconfd-2 was manually restarted. Now:

  - gconftool-2 --makefile-{install|uninstall}-rule will send a SIGHUP
    to all the gconfd-2 processes.
  - upon receipt of that SIGHUP, gconfd-2 will reload the database and
    therefore pick up the added/removed schemas (note that the stock
    gconfd-2 already reloaded the database when receiving a SIGHUP, but
    only in the periodic cleanup which ran every 30 seconds; I've
    modified it to reload the database immediately so that applications
    can be started right after they have been installed).
This commit is contained in:
Jean-Yves Lefort 2006-05-05 11:01:31 +00:00
parent c460cf6730
commit 4b5f693904
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=161411
3 changed files with 93 additions and 0 deletions

View file

@ -8,6 +8,7 @@
PORTNAME= gconf2
PORTVERSION= 2.14.0
PORTREVISION= 1
CATEGORIES= devel gnome
MASTER_SITES= ${MASTER_SITE_GNOME}
MASTER_SITE_SUBDIR= sources/GConf/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}

View file

@ -0,0 +1,64 @@
--- gconf/gconfd.c.orig Fri May 5 12:40:23 2006
+++ gconf/gconfd.c Fri May 5 12:41:43 2006
@@ -124,12 +124,6 @@
static gboolean in_shutdown = FALSE;
-/*
- * Flag indicating we received a SIGHUP and we should reaload
- * all sources during the next periodic_cleanup()
- */
-static gboolean need_db_reload = FALSE;
-
/*
* CORBA goo
*/
@@ -410,6 +404,18 @@
}
static void
+reload_db (void)
+{
+ gconf_log (GCL_INFO, _("SIGHUP received, reloading all databases"));
+
+ logfile_save ();
+ shutdown_databases ();
+ init_databases ();
+ gconf_server_load_sources ();
+ logfile_read ();
+}
+
+static void
signal_handler (int signo)
{
static gint in_fatal = 0;
@@ -482,8 +488,8 @@
case SIGHUP:
--in_fatal;
- /* reload sources during next periodic_cleanup() */
- need_db_reload = TRUE;
+ /* reload sources immediately */
+ reload_db ();
break;
#endif
@@ -864,18 +870,6 @@
static gboolean
periodic_cleanup_timeout(gpointer data)
{
- if (need_db_reload)
- {
- gconf_log (GCL_INFO, _("SIGHUP received, reloading all databases"));
-
- need_db_reload = FALSE;
- logfile_save ();
- shutdown_databases ();
- init_databases ();
- gconf_server_load_sources ();
- logfile_read ();
- }
-
gconf_log (GCL_DEBUG, "Performing periodic cleanup, expiring cache cruft");
drop_old_clients ();

View file

@ -0,0 +1,28 @@
--- gconf/gconftool.c.orig Fri May 5 12:36:01 2006
+++ gconf/gconftool.c Fri May 5 12:39:29 2006
@@ -3724,6 +3724,8 @@
static int
do_makefile_install(GConfEngine* conf, const gchar** args, gboolean unload)
{
+ int sync_result;
+
if (args == NULL)
{
g_printerr (_("Must specify some schema files to install\n"));
@@ -3738,7 +3740,15 @@
++args;
}
- return do_sync (conf);
+ sync_result = do_sync (conf);
+
+ /*
+ * Send all the gconfd-2 processes a SIGHUP so that they reload the
+ * databases and pick up the added/removed schemas.
+ */
+ system("/usr/bin/killall -SIGHUP gconfd-2 >/dev/null 2>&1");
+
+ return sync_result;
}
typedef enum {