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:
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
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
PORTNAME= gconf2
|
PORTNAME= gconf2
|
||||||
PORTVERSION= 2.14.0
|
PORTVERSION= 2.14.0
|
||||||
|
PORTREVISION= 1
|
||||||
CATEGORIES= devel gnome
|
CATEGORIES= devel gnome
|
||||||
MASTER_SITES= ${MASTER_SITE_GNOME}
|
MASTER_SITES= ${MASTER_SITE_GNOME}
|
||||||
MASTER_SITE_SUBDIR= sources/GConf/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}
|
MASTER_SITE_SUBDIR= sources/GConf/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}
|
||||||
|
|
64
devel/gconf2/files/patch-gconf_gconfd.c
Normal file
64
devel/gconf2/files/patch-gconf_gconfd.c
Normal 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 ();
|
28
devel/gconf2/files/patch-gconf_gconftool.c
Normal file
28
devel/gconf2/files/patch-gconf_gconftool.c
Normal 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 {
|
Loading…
Reference in a new issue