diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2013-02-22 06:55:59 -0500 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2013-02-22 07:00:56 -0500 |
commit | 1e994d46ef5268cde76d6bf0c1f611864124a71c (patch) | |
tree | f64adb28fc1f25e9c349d315d6b699df39c2e064 | |
parent | d64269932c0824164f8b52d5bee325e412962a4a (diff) | |
download | evolution-data-server-1e994d46ef5268cde76d6bf0c1f611864124a71c.tar.gz |
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.
(cherry picked from commit af31c05e026bf9b7881ddc9adfa29d78e29766c0)
-rw-r--r-- | 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 91ecbf75c..3d4e6980f 100644 --- a/libebackend/e-source-registry-server.c +++ b/libebackend/e-source-registry-server.c @@ -1702,20 +1702,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); |