[GNC-dev] gnucash maint: Multiple changes pushed
Derek Atkins
derek at ihtfp.com
Wed Jan 9 09:17:56 EST 2019
HI,
On Wed, January 9, 2019 9:12 am, Geert Janssens wrote:
> I like the idea of caching the system locale for future use. Too bad the
> std::locale is working so poorly on Windows :(
>
> Op zondag 6 januari 2019 19:13:28 CET schreef John Ralls:
>> +const std::locale&
>> +gnc_get_locale()
>> +{
>> + static std::locale cached;
>> + static bool tried_already = false;
>
> If I understand it correctly using static variables makes the function
> unsuitable for multi-threading, right ?
Not necessarily. There is a race condition on first-use, but beyond that
I don't see a MT issue here. The data is read-only, right? Multiple
threads could read from the same read-only data simultaneously, so that
should be fine.
Static data is ont MT-unsafe if it's being changed on a per-call basis
(e.g. a time_t -> string API returning a static string buffer).
> Any idea how difficult would it be to fix that ?
You could add a mutex around the initialization. That's all I think you
would need here.
> I know GnuCash is not thread-safe by a long shot and gtk itself is single
> threaded so it doesn't matter that much.
>
> However I silently set a personal goal of changing that sometime. The C
> code
> is a lost cause IMO, but it might be worth to keep multi-threading in mind
> as
> we gradually convert to c++. In my basic understanding of threading this
> particular function should not be too hard to make tread safe.
-derek
--
Derek Atkins 617-623-3745
derek at ihtfp.com www.ihtfp.com
Computer and Internet Security Consultant
More information about the gnucash-devel
mailing list