[tracker/wip/carlosg/domain-ontologies: 42/55] libtracker-common: Make locale readonly
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/domain-ontologies: 42/55] libtracker-common: Make locale readonly
- Date: Sun, 11 Jun 2017 15:06:50 +0000 (UTC)
commit 0cb5a2802a349ba38ac54f9cf325efc65ad6823f
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Jun 6 21:42:06 2017 +0200
libtracker-common: Make locale readonly
There's no reasonable situation why we should change this from
a library. Initialization (and shutdown) was also mostly useless
as it would just set the same settings that it just retrieved.
It's been turned into a sanity check for the relevant places.
src/libtracker-common/libtracker-common.vapi | 2 +-
src/libtracker-common/tracker-locale.c | 126 +++++----------------
src/libtracker-common/tracker-locale.h | 8 +-
src/libtracker-data/tracker-data-manager.c | 59 +----------
src/libtracker-direct/tracker-direct.vala | 2 +-
src/tracker-extract/tracker-main.c | 9 +-
tests/libtracker-common/tracker-file-utils-test.c | 6 +-
tests/libtracker-common/tracker-utils-test.c | 5 +-
tests/libtracker-extract/tracker-encoding-test.c | 4 +-
9 files changed, 42 insertions(+), 179 deletions(-)
---
diff --git a/src/libtracker-common/libtracker-common.vapi b/src/libtracker-common/libtracker-common.vapi
index d3db3b9..65c2e43 100644
--- a/src/libtracker-common/libtracker-common.vapi
+++ b/src/libtracker-common/libtracker-common.vapi
@@ -69,7 +69,7 @@ namespace Tracker {
[CCode (cheader_filename = "libtracker-common/tracker-locale.h")]
namespace Locale {
- public void init ();
+ public void sanity_check ();
}
[Compact]
diff --git a/src/libtracker-common/tracker-locale.c b/src/libtracker-common/tracker-locale.c
index 20a5134..0d2af23 100644
--- a/src/libtracker-common/tracker-locale.c
+++ b/src/libtracker-common/tracker-locale.c
@@ -26,146 +26,78 @@
#include "tracker-locale.h"
-/* Current locales in use. They will be stored in heap and available throughout
- * the whole program execution, so will be reported as still reachable by Valgrind.
- */
-static gchar *current_locales[TRACKER_LOCALE_LAST];
-
static const gchar *locale_names[TRACKER_LOCALE_LAST] = {
- "TRACKER_LOCALE_LANGUAGE",
- "TRACKER_LOCALE_TIME",
- "TRACKER_LOCALE_COLLATE",
- "TRACKER_LOCALE_NUMERIC",
- "TRACKER_LOCALE_MONETARY"
+ "LANG",
+ "LC_TIME",
+ "LC_COLLATE",
+ "LC_NUMERIC",
+ "LC_MONETARY"
};
-/* Already initialized? */
-static gboolean initialized;
-
static GRecMutex locales_mutex;
-const gchar*
-tracker_locale_get_name (guint i)
+static const gchar *
+tracker_locale_get_unlocked (TrackerLocaleID id)
{
- g_return_val_if_fail (i < TRACKER_LOCALE_LAST, NULL);
- return locale_names[i];
-}
+ const gchar *env_locale = NULL;
-void
-tracker_locale_set (TrackerLocaleID id,
- const gchar *value)
-{
- g_rec_mutex_lock (&locales_mutex);
-
- if (current_locales[id]) {
- g_debug ("Locale '%s' was changed from '%s' to '%s'",
- locale_names[id],
- current_locales[id],
- value);
- g_free (current_locales[id]);
- } else {
- g_debug ("Locale '%s' was set to '%s'",
- locale_names[id],
- value);
- }
-
- /* Store the new one */
- current_locales[id] = g_strdup (value);
-
- /* And also set the new one in the corresponding envvar */
switch (id) {
case TRACKER_LOCALE_LANGUAGE:
- g_setenv ("LANG", value, TRUE);
+ env_locale = g_getenv ("LANG");
break;
case TRACKER_LOCALE_TIME:
- setlocale (LC_TIME, value);
+ env_locale = setlocale (LC_TIME, NULL);
break;
case TRACKER_LOCALE_COLLATE:
- setlocale (LC_COLLATE, value);
+ env_locale = setlocale (LC_COLLATE, NULL);
break;
case TRACKER_LOCALE_NUMERIC:
- setlocale (LC_NUMERIC, value);
+ env_locale = setlocale (LC_NUMERIC, NULL);
break;
case TRACKER_LOCALE_MONETARY:
- setlocale (LC_MONETARY, value);
+ env_locale = setlocale (LC_MONETARY, NULL);
break;
- case TRACKER_LOCALE_LAST:
- /* Make compiler happy */
- g_warn_if_reached ();
+ default:
+ g_assert_not_reached ();
break;
}
- g_rec_mutex_unlock (&locales_mutex);
+ return env_locale;
}
void
-tracker_locale_init (void)
+tracker_locale_sanity_check (void)
{
guint i;
- for (i = 0; i < TRACKER_LOCALE_LAST; i++) {
- if (!current_locales[i]) {
- const gchar *env_locale = NULL;
-
- switch (i) {
- case TRACKER_LOCALE_LANGUAGE:
- env_locale = g_getenv ("LANG");
- break;
- case TRACKER_LOCALE_TIME:
- env_locale = setlocale (LC_TIME, NULL);
- break;
- case TRACKER_LOCALE_COLLATE:
- env_locale = setlocale (LC_COLLATE, NULL);
- break;
- case TRACKER_LOCALE_NUMERIC:
- env_locale = setlocale (LC_NUMERIC, NULL);
- break;
- case TRACKER_LOCALE_MONETARY:
- env_locale = setlocale (LC_MONETARY, NULL);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- if (!env_locale) {
- g_warning ("Locale '%d' is not set, defaulting to C locale", i);
- tracker_locale_set (i, "C");
- } else {
- tracker_locale_set (i, env_locale);
- }
- }
- }
+ g_rec_mutex_lock (&locales_mutex);
- /* So we're initialized */
- initialized = TRUE;
-}
+ for (i = 0; i < TRACKER_LOCALE_LAST; i++) {
+ const gchar *env_locale = NULL;
-void
-tracker_locale_shutdown (void)
-{
- gint i;
+ env_locale = tracker_locale_get_unlocked (i);
- for (i = 0; i < TRACKER_LOCALE_LAST; i++) {
- g_free (current_locales[i]);
- current_locales[i] = NULL;
+ if (!env_locale) {
+ g_warning ("Locale '%s' is not set, defaulting to C locale", locale_names[i]);
+ }
}
- initialized = FALSE;
+ g_rec_mutex_unlock (&locales_mutex);
}
gchar *
tracker_locale_get (TrackerLocaleID id)
{
+ const gchar *env_locale = NULL;
gchar *locale;
- g_return_val_if_fail (initialized, NULL);
-
g_rec_mutex_lock (&locales_mutex);
+ env_locale = tracker_locale_get_unlocked (id);
+
/* Always return a duplicated string, as the locale may change at any
* moment */
- locale = g_strdup (current_locales[id]);
+ locale = g_strdup (env_locale);
g_rec_mutex_unlock (&locales_mutex);
diff --git a/src/libtracker-common/tracker-locale.h b/src/libtracker-common/tracker-locale.h
index d1b8003..32547d1 100644
--- a/src/libtracker-common/tracker-locale.h
+++ b/src/libtracker-common/tracker-locale.h
@@ -38,19 +38,13 @@ typedef enum {
TRACKER_LOCALE_LAST
} TrackerLocaleID;
-void tracker_locale_init (void);
-void tracker_locale_shutdown (void);
+void tracker_locale_sanity_check (void);
/* Get the current locale of the given type.
* Note that it returns a newly-allocated string which should be g_free()-ed
*/
gchar *tracker_locale_get (TrackerLocaleID id);
-const gchar* tracker_locale_get_name (guint i);
-void tracker_locale_set (TrackerLocaleID id,
- const gchar *value);
-
-
G_END_DECLS
#endif /* __LIBTRACKER_COMMON_LOCALE_H__ */
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 83d59a4..0913203 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -3794,7 +3794,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_ontologies_init ();
if (!reloading) {
- tracker_locale_init ();
+ tracker_locale_sanity_check ();
}
#ifndef DISABLE_JOURNAL
@@ -3816,9 +3816,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
g_propagate_error (error, internal_error);
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -3863,9 +3860,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -3892,9 +3886,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
g_free (uri);
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
}
@@ -3919,9 +3910,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -3955,9 +3943,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -3998,9 +3983,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4020,9 +4002,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4047,9 +4026,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
ontology_writer = NULL;
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4073,9 +4049,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_journal_free (ontology_writer, NULL);
ontology_writer = NULL;
#endif /* DISABLE_JOURNAL */
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4104,9 +4077,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4265,9 +4235,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4315,7 +4282,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
}
initialized = TRUE;
- /* This also does tracker_locale_shutdown */
tracker_data_manager_shutdown ();
return tracker_data_manager_init (flags |
TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY,
@@ -4359,9 +4325,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4409,7 +4372,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
}
initialized = TRUE;
- /* This also does tracker_locale_shutdown */
tracker_data_manager_shutdown ();
return tracker_data_manager_init (flags |
TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY,
@@ -4517,7 +4479,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
}
initialized = TRUE;
- /* This also does tracker_locale_shutdown */
tracker_data_manager_shutdown ();
return tracker_data_manager_init (flags |
TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY,
@@ -4545,9 +4506,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4582,9 +4540,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4633,9 +4588,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4653,9 +4605,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4685,9 +4634,6 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
#endif /* DISABLE_JOURNAL */
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
tracker_data_update_shutdown ();
return FALSE;
@@ -4743,9 +4689,6 @@ tracker_data_manager_shutdown (void)
tracker_db_manager_shutdown ();
tracker_ontologies_shutdown ();
- if (!reloading) {
- tracker_locale_shutdown ();
- }
#if HAVE_TRACKER_FTS
if (!tracker_fts_shutdown ()) {
diff --git a/src/libtracker-direct/tracker-direct.vala b/src/libtracker-direct/tracker-direct.vala
index 0382de9..df7ee16 100644
--- a/src/libtracker-direct/tracker-direct.vala
+++ b/src/libtracker-direct/tracker-direct.vala
@@ -118,7 +118,7 @@ public class Tracker.Direct.Connection : Tracker.Sparql.Connection, AsyncInitabl
init_mutex.lock ();
try {
- Locale.init ();
+ Locale.sanity_check ();
DBManagerFlags db_flags = DBManagerFlags.ENABLE_MUTEXES;
if ((flags & Sparql.ConnectionFlags.READONLY) != 0)
db_flags |= DBManagerFlags.READONLY;
diff --git a/src/tracker-extract/tracker-main.c b/src/tracker-extract/tracker-main.c
index 51f9692..484371f 100644
--- a/src/tracker-extract/tracker-main.c
+++ b/src/tracker-extract/tracker-main.c
@@ -271,7 +271,7 @@ run_standalone (TrackerConfig *config)
}
output_format = enum_value->value;
- tracker_locale_init ();
+ tracker_locale_sanity_check ();
/* This makes sure we don't steal all the system's resources */
initialize_priority_and_scheduling (tracker_config_get_sched_idle (config),
@@ -285,7 +285,6 @@ run_standalone (TrackerConfig *config)
if (!object) {
g_object_unref (file);
g_free (uri);
- tracker_locale_shutdown ();
return EXIT_FAILURE;
}
@@ -295,8 +294,6 @@ run_standalone (TrackerConfig *config)
g_object_unref (file);
g_free (uri);
- tracker_locale_shutdown ();
-
return EXIT_SUCCESS;
}
@@ -398,7 +395,7 @@ main (int argc, char *argv[])
g_thread_self ());
#endif /* THREAD_ENABLE_TRACE */
- tracker_locale_init ();
+ tracker_locale_sanity_check ();
controller = tracker_extract_controller_new (decorator);
tracker_miner_start (TRACKER_MINER (decorator));
@@ -417,8 +414,6 @@ main (int argc, char *argv[])
tracker_miner_stop (TRACKER_MINER (decorator));
/* Shutdown subsystems */
- tracker_locale_shutdown ();
-
g_object_unref (extract);
g_object_unref (decorator);
g_object_unref (controller);
diff --git a/tests/libtracker-common/tracker-file-utils-test.c
b/tests/libtracker-common/tracker-file-utils-test.c
index d50cbb2..1575c40 100644
--- a/tests/libtracker-common/tracker-file-utils-test.c
+++ b/tests/libtracker-common/tracker-file-utils-test.c
@@ -21,6 +21,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#include <locale.h>
#include <glib.h>
#include <glib/gstdio.h>
@@ -431,7 +432,8 @@ main (int argc, char **argv)
g_test_init (&argc, &argv, NULL);
- tracker_locale_init ();
+ setlocale (LC_ALL, "");
+
ensure_file_exists (TEST_FILENAME);
ensure_file_exists (TEST_HIDDEN_FILENAME);
@@ -470,7 +472,5 @@ main (int argc, char **argv)
remove_file (TEST_FILENAME);
remove_file (TEST_HIDDEN_FILENAME);
- tracker_locale_shutdown ();
-
return result;
}
diff --git a/tests/libtracker-common/tracker-utils-test.c b/tests/libtracker-common/tracker-utils-test.c
index 81c9b75..8025af8 100644
--- a/tests/libtracker-common/tracker-utils-test.c
+++ b/tests/libtracker-common/tracker-utils-test.c
@@ -24,6 +24,7 @@
#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-utils.h>
#include <libtracker-common/tracker-locale.h>
+#include <locale.h>
static void
test_seconds_to_string ()
@@ -139,7 +140,7 @@ main (int argc, char **argv)
g_test_init (&argc, &argv, NULL);
- tracker_locale_init ();
+ setlocale (LC_ALL, "");
g_test_add_func ("/libtracker-common/tracker-utils/seconds_to_string",
test_seconds_to_string);
@@ -161,7 +162,5 @@ main (int argc, char **argv)
ret = g_test_run ();
- tracker_locale_shutdown ();
-
return ret;
}
diff --git a/tests/libtracker-extract/tracker-encoding-test.c
b/tests/libtracker-extract/tracker-encoding-test.c
index ede6714..cd14088 100644
--- a/tests/libtracker-extract/tracker-encoding-test.c
+++ b/tests/libtracker-extract/tracker-encoding-test.c
@@ -23,6 +23,7 @@
#include <glib-object.h>
#include <libtracker-extract/tracker-encoding.h>
#include <libtracker-common/tracker-locale.h>
+#include <locale.h>
static void
test_encoding_guessing ()
@@ -65,12 +66,11 @@ main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
- tracker_locale_init ();
+ setlocale (LC_ALL, "");
g_test_add_func ("/libtracker-extract/tracker-encoding/encoding_guessing",
test_encoding_guessing);
g_test_add_func ("/libtracker-extract/tracker-encoding/can_guess",
test_encoding_can_guess);
- tracker_locale_shutdown ();
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]