[evolution-data-server] Add book/calendar-factory argument to override backend-per-process compile-time option
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add book/calendar-factory argument to override backend-per-process compile-time option
- Date: Thu, 1 Feb 2018 17:20:30 +0000 (UTC)
commit 1bb5cf7322091700fa8fed2f576773977f105924
Author: Milan Crha <mcrha redhat com>
Date: Thu Feb 1 18:17:42 2018 +0100
Add book/calendar-factory argument to override backend-per-process compile-time option
The evolution-addressbook-factory and evolution-calendar-factory processes
have now an argument --backend-per-process, which can be any integer, where
value 0 means to not use backend-per-process feature, value 1 means to use it
and any other value means to use as evolution-data-server had been configured
during compile-time. The default is to respect the compile-time option.
.../libedata-book/e-data-book-factory.c | 11 ++--
.../libedata-book/e-data-book-factory.h | 3 +-
src/calendar/libedata-cal/e-data-cal-factory.c | 11 ++--
src/calendar/libedata-cal/e-data-cal-factory.h | 3 +-
src/libebackend/e-data-factory.c | 77 ++++++++++++++++++--
src/libebackend/e-data-factory.h | 2 +
.../evolution-addressbook-factory.c | 5 +-
.../evolution-calendar-factory.c | 5 +-
8 files changed, 95 insertions(+), 22 deletions(-)
---
diff --git a/src/addressbook/libedata-book/e-data-book-factory.c
b/src/addressbook/libedata-book/e-data-book-factory.c
index ba18068..d34b65f 100644
--- a/src/addressbook/libedata-book/e-data-book-factory.c
+++ b/src/addressbook/libedata-book/e-data-book-factory.c
@@ -190,11 +190,12 @@ e_data_book_factory_init (EDataBookFactory *factory)
}
EDBusServer *
-e_data_book_factory_new (GCancellable *cancellable,
+e_data_book_factory_new (gint backend_per_process,
+ GCancellable *cancellable,
GError **error)
{
- return g_initable_new (
- E_TYPE_DATA_BOOK_FACTORY,
- cancellable, error,
- "reload-supported", TRUE, NULL);
+ return g_initable_new (E_TYPE_DATA_BOOK_FACTORY, cancellable, error,
+ "reload-supported", TRUE,
+ "backend-per-process", backend_per_process,
+ NULL);
}
diff --git a/src/addressbook/libedata-book/e-data-book-factory.h
b/src/addressbook/libedata-book/e-data-book-factory.h
index 40a2988..4903cb8 100644
--- a/src/addressbook/libedata-book/e-data-book-factory.h
+++ b/src/addressbook/libedata-book/e-data-book-factory.h
@@ -77,7 +77,8 @@ struct _EDataBookFactoryClass {
};
GType e_data_book_factory_get_type (void) G_GNUC_CONST;
-EDBusServer * e_data_book_factory_new (GCancellable *cancellable,
+EDBusServer * e_data_book_factory_new (gint backend_per_process,
+ GCancellable *cancellable,
GError **error);
G_END_DECLS
diff --git a/src/calendar/libedata-cal/e-data-cal-factory.c b/src/calendar/libedata-cal/e-data-cal-factory.c
index 810b310..baaeb5f 100644
--- a/src/calendar/libedata-cal/e-data-cal-factory.c
+++ b/src/calendar/libedata-cal/e-data-cal-factory.c
@@ -268,7 +268,8 @@ e_data_cal_factory_init (EDataCalFactory *factory)
}
EDBusServer *
-e_data_cal_factory_new (GCancellable *cancellable,
+e_data_cal_factory_new (gint backend_per_process,
+ GCancellable *cancellable,
GError **error)
{
icalarray *builtin_timezones;
@@ -305,8 +306,8 @@ e_data_cal_factory_new (GCancellable *cancellable,
icaltimezone_get_component (zone);
}
- return g_initable_new (
- E_TYPE_DATA_CAL_FACTORY,
- cancellable, error,
- "reload-supported", TRUE, NULL);
+ return g_initable_new (E_TYPE_DATA_CAL_FACTORY, cancellable, error,
+ "reload-supported", TRUE,
+ "backend-per-process", backend_per_process,
+ NULL);
}
diff --git a/src/calendar/libedata-cal/e-data-cal-factory.h b/src/calendar/libedata-cal/e-data-cal-factory.h
index 1e01826..47f9c7f 100644
--- a/src/calendar/libedata-cal/e-data-cal-factory.h
+++ b/src/calendar/libedata-cal/e-data-cal-factory.h
@@ -78,7 +78,8 @@ struct _EDataCalFactoryClass {
};
GType e_data_cal_factory_get_type (void);
-EDBusServer * e_data_cal_factory_new (GCancellable *cancellable,
+EDBusServer * e_data_cal_factory_new (gint backend_per_process,
+ GCancellable *cancellable,
GError **error);
G_END_DECLS
diff --git a/src/libebackend/e-data-factory.c b/src/libebackend/e-data-factory.c
index 7be9883..26faa6a 100644
--- a/src/libebackend/e-data-factory.c
+++ b/src/libebackend/e-data-factory.c
@@ -84,12 +84,14 @@ struct _EDataFactoryPrivate {
DataFactorySpawnSubprocessStates spawn_subprocess_state;
gboolean reload_supported;
+ gint backend_per_process;
};
enum {
PROP_0,
PROP_REGISTRY,
- PROP_RELOAD_SUPPORTED
+ PROP_RELOAD_SUPPORTED,
+ PROP_BACKEND_PER_PROCESS
};
/* Forward Declarations */
@@ -285,19 +287,31 @@ data_factory_subprocess_data_free (DataFactorySubprocessData *sd)
}
static gchar *
-data_factory_dup_subprocess_helper_hash_key (const gchar *factory_name,
+data_factory_dup_subprocess_helper_hash_key (gint override_backend_per_process,
+ const gchar *factory_name,
const gchar *extension_name,
const gchar *uid,
gboolean backend_factory_share_subprocess)
{
gchar *helper_hash_key;
+ gboolean backend_per_process;
-#ifdef ENABLE_BACKEND_PER_PROCESS
- helper_hash_key = backend_factory_share_subprocess ?
- g_strdup (factory_name) : g_strdup_printf ("%s:%s:%s", factory_name, extension_name, uid);
-#else
- helper_hash_key = g_strdup ("not-using-bacend-per-process");
-#endif
+ if (override_backend_per_process == 0 || override_backend_per_process == 1) {
+ backend_per_process = override_backend_per_process == 1;
+ } else {
+ #ifdef ENABLE_BACKEND_PER_PROCESS
+ backend_per_process = TRUE;
+ #else
+ backend_per_process = FALSE;
+ #endif
+ }
+
+ if (backend_per_process) {
+ helper_hash_key = backend_factory_share_subprocess ?
+ g_strdup (factory_name) : g_strdup_printf ("%s:%s:%s", factory_name, extension_name,
uid);
+ } else {
+ helper_hash_key = g_strdup ("not-using-backend-per-process");
+ }
return helper_hash_key;
}
@@ -830,6 +844,16 @@ e_data_factory_set_reload_supported (EDataFactory *data_factory,
data_factory->priv->reload_supported = is_supported;
}
+
+static void
+e_data_factory_set_backend_per_process (EDataFactory *data_factory,
+ gint backend_per_process)
+{
+ g_return_if_fail (E_IS_DATA_FACTORY (data_factory));
+
+ data_factory->priv->backend_per_process = backend_per_process;
+}
+
static void
e_data_factory_get_property (GObject *object,
guint property_id,
@@ -850,6 +874,14 @@ e_data_factory_get_property (GObject *object,
e_data_factory_get_reload_supported (
E_DATA_FACTORY (object)));
return;
+
+ case PROP_BACKEND_PER_PROCESS:
+ g_value_set_int (
+ value,
+ e_data_factory_get_backend_per_process (
+ E_DATA_FACTORY (object)));
+ return;
+
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -867,6 +899,12 @@ e_data_factory_set_property (GObject *object,
E_DATA_FACTORY (object),
g_value_get_boolean (value));
return;
+
+ case PROP_BACKEND_PER_PROCESS:
+ e_data_factory_set_backend_per_process (
+ E_DATA_FACTORY (object),
+ g_value_get_int (value));
+ return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -1026,6 +1064,19 @@ e_data_factory_class_init (EDataFactoryClass *class)
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
+ PROP_BACKEND_PER_PROCESS,
+ g_param_spec_int (
+ "backend-per-process",
+ "Backend Per Process",
+ "Override backend-per-process compile-time option",
+ G_MININT, G_MAXINT,
+ -1,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
}
static void
@@ -1071,6 +1122,7 @@ e_data_factory_init (EDataFactory *data_factory)
data_factory->priv->spawn_subprocess_state = DATA_FACTORY_SPAWN_SUBPROCESS_NONE;
data_factory->priv->reload_supported = FALSE;
+ data_factory->priv->backend_per_process = -1;
}
/**
@@ -1222,6 +1274,7 @@ data_factory_spawn_subprocess_backend (EDataFactory *data_factory,
factory_name = class->get_factory_name (backend_factory);
subprocess_helpers_hash_key = data_factory_dup_subprocess_helper_hash_key (
+ e_data_factory_get_backend_per_process (data_factory),
factory_name, extension_name, uid, e_backend_factory_share_subprocess
(backend_factory));
g_mutex_lock (&priv->mutex);
@@ -1393,3 +1446,11 @@ e_data_factory_get_reload_supported (EDataFactory *data_factory)
return data_factory->priv->reload_supported;
}
+
+gint
+e_data_factory_get_backend_per_process (EDataFactory *data_factory)
+{
+ g_return_val_if_fail (E_IS_DATA_FACTORY (data_factory), -1);
+
+ return data_factory->priv->backend_per_process;
+}
diff --git a/src/libebackend/e-data-factory.h b/src/libebackend/e-data-factory.h
index 630806b..8d4e5a0 100644
--- a/src/libebackend/e-data-factory.h
+++ b/src/libebackend/e-data-factory.h
@@ -105,6 +105,8 @@ void e_data_factory_spawn_subprocess_backend
const gchar *subprocess_path);
gboolean e_data_factory_get_reload_supported
(EDataFactory *data_factory);
+gint e_data_factory_get_backend_per_process
+ (EDataFactory *data_factory);
G_END_DECLS
diff --git a/src/services/evolution-addressbook-factory/evolution-addressbook-factory.c
b/src/services/evolution-addressbook-factory/evolution-addressbook-factory.c
index ad66d8f..78dd6fc 100644
--- a/src/services/evolution-addressbook-factory/evolution-addressbook-factory.c
+++ b/src/services/evolution-addressbook-factory/evolution-addressbook-factory.c
@@ -30,6 +30,7 @@
static gboolean opt_keep_running = FALSE;
static gboolean opt_wait_for_client = FALSE;
+static gint opt_backend_per_process = -1;
static GOptionEntry entries[] = {
@@ -37,6 +38,8 @@ static GOptionEntry entries[] = {
N_("Keep running after the last client is closed"), NULL },
{ "wait-for-client", 'w', 0, G_OPTION_ARG_NONE, &opt_wait_for_client,
N_("Wait running until at least one client is connected"), NULL },
+ { "backend-per-process", 'b', 0, G_OPTION_ARG_INT, &opt_backend_per_process,
+ N_("Overrides compile-time backend per process option; use 1 to enable, 0 to disable, any other
value is to use compile-time option"), NULL },
{ NULL }
};
@@ -83,7 +86,7 @@ main (gint argc,
e_xml_initialize_in_main ();
reload:
- server = e_data_book_factory_new (NULL, &error);
+ server = e_data_book_factory_new (opt_backend_per_process, NULL, &error);
if (error != NULL) {
g_printerr ("%s\n", error->message);
diff --git a/src/services/evolution-calendar-factory/evolution-calendar-factory.c
b/src/services/evolution-calendar-factory/evolution-calendar-factory.c
index 55d093a..1c7a5bd 100644
--- a/src/services/evolution-calendar-factory/evolution-calendar-factory.c
+++ b/src/services/evolution-calendar-factory/evolution-calendar-factory.c
@@ -32,6 +32,7 @@
static gboolean opt_keep_running = FALSE;
static gboolean opt_wait_for_client = FALSE;
+static gint opt_backend_per_process = -1;
static GOptionEntry entries[] = {
@@ -39,6 +40,8 @@ static GOptionEntry entries[] = {
N_("Keep running after the last client is closed"), NULL },
{ "wait-for-client", 'w', 0, G_OPTION_ARG_NONE, &opt_wait_for_client,
N_("Wait running until at least one client is connected"), NULL },
+ { "backend-per-process", 'b', 0, G_OPTION_ARG_INT, &opt_backend_per_process,
+ N_("Overrides compile-time backend per process option; use 1 to enable, 0 to disable, any other
value is to use compile-time option"), NULL },
{ NULL }
};
@@ -93,7 +96,7 @@ main (gint argc,
e_xml_initialize_in_main ();
reload:
- server = e_data_cal_factory_new (NULL, &error);
+ server = e_data_cal_factory_new (opt_backend_per_process, NULL, &error);
if (error != NULL) {
g_printerr ("%s\n", error->message);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]