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
|
||||
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/}
|
||||
|
|
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