[evolution-data-server/gnome-3-6] e_source_registry_server_load_directory: Monitor failure is non-fatal.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/gnome-3-6] e_source_registry_server_load_directory: Monitor failure is non-fatal.
- Date: Fri, 22 Feb 2013 12:00:37 +0000 (UTC)
commit 1e994d46ef5268cde76d6bf0c1f611864124a71c
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.
(cherry picked from commit af31c05e026bf9b7881ddc9adfa29d78e29766c0)
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 91ecbf7..3d4e698 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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]