[evolution-data-server] e_source_registry_server_load_directory: Monitor failure is non-fatal.



commit af31c05e026bf9b7881ddc9adfa29d78e29766c0
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Feb 22 06:55:59 2013 -0500

    e_source_registry_server_load_directory: Monitor failure is non-fatal.
    
    Directory monitoring is a nice-to-have feature, but is not supported in
    some contexts.  If we fail to create a GFileMonitor, leave a breadcrumb
    on the console to indicate something whent wrong, but don't return an
    error status.  That would cause the whole registry process to terminate.

 libebackend/e-source-registry-server.c |   38 +++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 10 deletions(-)
---
diff --git a/libebackend/e-source-registry-server.c b/libebackend/e-source-registry-server.c
index d955ce7..c91b77b 100644
--- a/libebackend/e-source-registry-server.c
+++ b/libebackend/e-source-registry-server.c
@@ -1778,20 +1778,38 @@ e_source_registry_server_load_directory (ESourceRegistryServer *server,
         * sources directory should be removable. */
        if (removable) {
                GFileMonitor *monitor;
+               GError *local_error = NULL;
 
+               /* Directory monitoring is a nice-to-have feature.
+                * If this fails, leave a breadcrumb on the console
+                * to indicate something went wrong, but don't return
+                * an error status. */
                monitor = g_file_monitor_directory (
-                       file, G_FILE_MONITOR_NONE, NULL, error);
-               if (monitor == NULL)
-                       return FALSE;
+                       file, G_FILE_MONITOR_NONE, NULL, &local_error);
 
-               g_signal_connect (
-                       monitor, "changed",
-                       G_CALLBACK (source_registry_server_monitor_changed_cb),
-                       server);
+               /* Sanity check. */
+               g_warn_if_fail (
+                       ((monitor != NULL) && (local_error == NULL)) ||
+                       ((monitor == NULL) && (local_error != NULL)));
 
-               g_hash_table_insert (
-                       server->priv->monitors,
-                       g_object_ref (file), monitor);
+               if (monitor != NULL) {
+                       g_signal_connect (
+                               monitor, "changed", G_CALLBACK (
+                               source_registry_server_monitor_changed_cb),
+                               server);
+
+                       g_hash_table_insert (
+                               server->priv->monitors,
+                               g_object_ref (file),
+                               g_object_ref (monitor));
+
+                       g_object_unref (monitor);
+               }
+
+               if (local_error != NULL) {
+                       g_warning ("%s: %s", G_STRFUNC, local_error->message);
+                       g_error_free (local_error);
+               }
        }
 
        g_object_unref (file);


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