http://bugzilla.redhat.com/858348 http://bugzilla.redhat.com/755992 diff -up GConf-3.2.5/gconf/gconfd.c.workaround-crash GConf-3.2.5/gconf/gconfd.c --- GConf-3.2.5/gconf/gconfd.c.workaround-crash 2012-03-07 13:08:55.000000000 -0500 +++ GConf-3.2.5/gconf/gconfd.c 2012-09-24 10:04:22.604652720 -0400 @@ -1053,63 +1053,6 @@ static GSList* main_loops = NULL; static guint timeout_id = 0; static gboolean need_log_cleanup = FALSE; -static gboolean -periodic_cleanup_timeout(gpointer data) -{ - if (need_db_reload) - { - gconf_log (GCL_INFO, _("SIGHUP received, reloading all databases")); - - need_db_reload = FALSE; -#ifdef HAVE_CORBA - logfile_save (); - shutdown_databases (); - init_databases (); - gconf_server_load_sources (); - logfile_read (); -#endif -#ifdef HAVE_DBUS - reload_databases (); -#endif - } - - gconf_log (GCL_DEBUG, "Performing periodic cleanup, expiring cache cruft"); - -#ifdef HAVE_CORBA - drop_old_clients (); -#endif - drop_old_databases (); - -#ifdef HAVE_DBUS - if (no_databases_in_use () && gconfd_dbus_client_count () == 0) -#else - if (no_databases_in_use () && client_count () == 0) -#endif - { - gconf_log (GCL_INFO, _("GConf server is not in use, shutting down.")); - gconfd_main_quit (); - return FALSE; - } - - /* expire old locale cache entries */ - gconfd_locale_cache_expire (); - -#ifdef HAVE_CORBA - if (!need_log_cleanup) - { - gconf_log (GCL_DEBUG, "No log file saving needed in periodic cleanup handler"); - return TRUE; - } - - /* Compress the running state file */ - logfile_save (); -#endif - - need_log_cleanup = FALSE; - - return TRUE; -} - void gconfd_need_log_cleanup (void) { @@ -1123,26 +1066,14 @@ gconf_main(void) loop = g_main_loop_new (NULL, TRUE); - if (main_loops == NULL) - { - gulong timeout_len = 60*0.5; /* 60 s/min * .5 min */ - - g_assert(timeout_id == 0); - timeout_id = g_timeout_add_seconds (timeout_len, - periodic_cleanup_timeout, - NULL); - - } - main_loops = g_slist_prepend(main_loops, loop); g_main_loop_run (loop); main_loops = g_slist_remove(main_loops, loop); - if (main_loops == NULL) + if (main_loops == NULL && timeout_id != 0) { - g_assert(timeout_id != 0); g_source_remove(timeout_id); timeout_id = 0; }