On Thu, Apr 2, 2015 at 3:21 AM, Rasmus Lerdorf <ras...@lerdorf.com> wrote:

> On 04/01/2015 09:15 AM, Dan Ackroyd wrote:
> > Hi,
> >
> > I'd like to get people's feedback for the idea of making setlocale be
> > either deprecated and to be removed eventually or just increasing the
> > warning level against people using it.
> >
> > The short version of why we should do this is that setlocale breaks
> > things. It is a process wide operation, that is not thread safe on
> > most platforms. Although people use it to alter the way strings are
> > output, it also breaks libraries that are assuming that they are
> > running in a "C" locale.
>
> The PHP setlocale() wrapper can be made threadsafe in a portable manner
> via newlocale()/uselocale(), so that part isn't an issue. Someone just
> needs to write the code for the threaded SAPIs. It hasn't been a high
> priority due to how few people use non-Windows ZTS mode so far.
>
> Obviously within the same process there may be issues with changing a
> locale to something unexpected by subsequent code, but that is really a
> bug in that code then. If some library function expects and only works
> in the "C" locale, it should make sure it is in that locale before doing
> anything and then restoring the locale back appropriately. And with a
> bit of symbol trickery libraries that do actually call setlocale to
> change it and restore it can be made to use our newlocale/uselocale
> thread-local locale mechanism.
>
> setlocale() is used quite a bit and for non-threaded, which is the bulk
> of php usage, it tends to work quite well. It is annoying that it is
> process-wide and as you noted that can cause issues, sure, and that the
> current implementation isn't threadsafe, but it isn't something that is
> technically unsolvable. Rather than throwing our hands in the air and
> just pulling the rug out from under people using it, we should take a
> look at fixing the problems associated with it instead.
>
> -Rasmus
>
>
To Rasmus's point, here's a PR for HHVM to provide a thread-safe setlocale
implementation: https://github.com/facebook/hhvm/pull/4736/files

It should be fairly easy to refactor the thread-safe-setlocale.(h/cpp)
files for Zend.

Reply via email to