gst: Don't set the locale in gst_init()
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 20 Nov 2012 11:56:12 +0000 (12:56 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 20 Nov 2012 11:56:12 +0000 (12:56 +0100)
The function init_pre() in gstreamer/gst/gst.c calls setlocale(LC_ALL, ""),
which sets the locale to the values specified in the environment.  This is
wrong for two reasons:

1. It is absolutely not the task of a library to decide on the correct locale
for a program.  Some programs change the locale for various (good or bad)
reasons, and libraries should respect that.  Programs where GStreamer's
overwriting of the locale causes bugs include Emacs [1, 2], Sublime Text [3],
and Lua [4].

[1] http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12392
[2] http://bugzilla.novell.com/show_bug.cgi?id=779426
[3] http://www.sublimetext.com/forum/viewtopic.php?f=3&t=8543
[4] https://github.com/pavouk/lgi/issues/19

Note that setting the locale can cause problems for programs that are not even
linked against GStreamer.  In the case of Emacs, for example, GStreamer seems
to be initialized through GTK via libcanberra.

2. Setting the locale is not thread-safe, and therefore should not be done in a
library.

https://bugzilla.gnome.org/show_bug.cgi?id=685650

gst/gst.c

index 4fdc8caf3e644d7225ee3ada32c47cb55e78cde8..4e36d9ce0cfb41b3a1792c570812c6734c786c34 100644 (file)
--- a/gst/gst.c
+++ b/gst/gst.c
@@ -478,7 +478,6 @@ init_pre (GOptionContext * context, GOptionGroup * group, gpointer data,
 #endif
 
 #ifdef ENABLE_NLS
-  setlocale (LC_ALL, "");
   bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
   bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 #endif /* ENABLE_NLS */