[tracker] tracker-extract: Cache TrackerConfig::max-bytes
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] tracker-extract: Cache TrackerConfig::max-bytes
- Date: Tue, 28 Feb 2017 20:18:23 +0000 (UTC)
commit e9e7cda6e5b5e83ac9d3b86127e6877b3f9db980
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Feb 28 21:04:12 2017 +0100
tracker-extract: Cache TrackerConfig::max-bytes
This is the only setting read from extractor modules. It turns out
that under the right circumstances a g_settings_get_value() call
can trigger open() calls with readwrite permissions from the caller
thread. This is forbidden in extractor threads and triggers warnings
like:
dconf-CRITICAL **: unable to create file '/run/user/1000/dconf/user':
Permission denied. dconf will not work properly.
Also, since this setting is meaningless to update during tracker-extract
lifetime, just drop the g_settings_bind() call, this means the setting
is only read once on startup.
https://bugzilla.gnome.org/show_bug.cgi?id=779342
src/tracker-extract/tracker-config.c | 9 +++++++--
src/tracker-extract/tracker-config.h | 2 +-
2 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/src/tracker-extract/tracker-config.c b/src/tracker-extract/tracker-config.c
index cc30633..7289255 100644
--- a/src/tracker-extract/tracker-config.c
+++ b/src/tracker-extract/tracker-config.c
@@ -226,9 +226,14 @@ config_constructed (GObject *object)
*/
g_settings_bind (settings, "verbosity", object, "verbosity", G_SETTINGS_BIND_GET |
G_SETTINGS_BIND_GET_NO_CHANGES);
g_settings_bind (settings, "sched-idle", object, "sched-idle", G_SETTINGS_BIND_GET);
- g_settings_bind (settings, "max-bytes", object, "max-bytes", G_SETTINGS_BIND_GET);
g_settings_bind (settings, "max-media-art-width", object, "max-media-art-width", G_SETTINGS_BIND_GET);
g_settings_bind (settings, "wait-for-miner-fs", object, "wait-for-miner-fs", G_SETTINGS_BIND_GET);
+
+ /* Cache settings accessed from extractor modules, we don't want
+ * the GSettings object accessed within these as it may trigger
+ * unintended open() calls.
+ */
+ TRACKER_CONFIG (settings)->max_bytes = g_settings_get_int (settings, "max-bytes");
}
TrackerConfig *
@@ -303,7 +308,7 @@ tracker_config_get_max_bytes (TrackerConfig *config)
{
g_return_val_if_fail (TRACKER_IS_CONFIG (config), 0);
- return g_settings_get_int (G_SETTINGS (config), "max-bytes");
+ return config->max_bytes;
}
gint
diff --git a/src/tracker-extract/tracker-config.h b/src/tracker-extract/tracker-config.h
index daf1574..c8af8ef 100644
--- a/src/tracker-extract/tracker-config.h
+++ b/src/tracker-extract/tracker-config.h
@@ -36,7 +36,7 @@ typedef struct TrackerConfigClass TrackerConfigClass;
struct TrackerConfig {
GSettings parent;
- gpointer priv;
+ gint max_bytes;
};
struct TrackerConfigClass {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]