This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 05/13/2014 02:14 PM, OndÅej BÃlka wrote:
tzstruct *ptr; void tz_set_internal (tzstruct *set) { tzstruct *old = atomic_exchange_acq (&ptr, set); if (old->malloced) free (old); }
With this implementation, couldn't a tzset in one thread crash a localtime_r running in another thread? E.g., won't trouble occur if the other thread's localtime_r implementation accesses the malloced storage at the same time the tzset thread invokes "free (old)"? POSIX allows some leeway here, and I presume we want to exploit that to improve performance, but does POSIX allow localtime_r to have undefined behavior if some other thread is simultaneously invoking tzset?
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |