summaryrefslogtreecommitdiff
path: root/src/libebackend
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2018-02-23 12:24:07 +0100
committerMilan Crha <mcrha@redhat.com>2018-02-23 12:24:07 +0100
commit2b058c94b083949c9376d9ce238e09478f66af5b (patch)
treea3106d45d6dee645caa57752b44eec2cd4b2caa9 /src/libebackend
parentdf7ae5022d2bed9d98faa553ad1cbd3bfc93ae3c (diff)
downloadevolution-data-server-2b058c94b083949c9376d9ce238e09478f66af5b.tar.gz
Bug 793031 - Decrease memory usage by disabling backend-per-process by default
Diffstat (limited to 'src/libebackend')
-rw-r--r--src/libebackend/e-data-factory.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/libebackend/e-data-factory.c b/src/libebackend/e-data-factory.c
index 26faa6a7b..0da6628d1 100644
--- a/src/libebackend/e-data-factory.c
+++ b/src/libebackend/e-data-factory.c
@@ -286,14 +286,9 @@ data_factory_subprocess_data_free (DataFactorySubprocessData *sd)
}
}
-static gchar *
-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)
+static gboolean
+data_factory_use_backend_per_process (gint override_backend_per_process)
{
- gchar *helper_hash_key;
gboolean backend_per_process;
if (override_backend_per_process == 0 || override_backend_per_process == 1) {
@@ -306,7 +301,19 @@ data_factory_dup_subprocess_helper_hash_key (gint override_backend_per_process,
#endif
}
- if (backend_per_process) {
+ return backend_per_process;
+}
+
+static gchar *
+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;
+
+ if (data_factory_use_backend_per_process (override_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 {
@@ -1268,6 +1275,8 @@ data_factory_spawn_subprocess_backend (EDataFactory *data_factory,
g_free (backend_name);
if (backend_factory) {
+ gboolean backend_per_process;
+
type_name = G_OBJECT_TYPE_NAME (backend_factory);
class = E_DATA_FACTORY_GET_CLASS (data_factory);
@@ -1333,11 +1342,13 @@ data_factory_spawn_subprocess_backend (EDataFactory *data_factory,
g_hash_table_insert (priv->subprocess_watched_ids, g_strdup (sd->bus_name), GUINT_TO_POINTER (watched_id));
g_mutex_unlock (&priv->subprocess_watched_ids_lock);
+ backend_per_process = data_factory_use_backend_per_process (e_data_factory_get_backend_per_process (data_factory));
+
subprocess = g_subprocess_new (
G_SUBPROCESS_FLAGS_NONE,
&error,
subprocess_path,
- "--factory", sd->factory_name,
+ "--factory", backend_per_process ? sd->factory_name : "all",
"--bus-name", sd->bus_name,
"--own-path", sd->path,
NULL);