This is the mail archive of the cygwin mailing list for the Cygwin 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] |
Jerry D. Hedden wrote: > [...] > Under 1.5.24, this test always passes. Under 1.5.25, it is > now frequently failing. If I add a debugging call in the > central most loop: > > print("got: $lt exp: $localtime\n"); > > I get the following as typical of the problem: > > 5 perl-current > ./perl -Ilib ext/threads/t/libc.t > 1..11 > ok 1 - use threads > got: Wed Dec 31 20:00:08 1969 exp: Wed Dec 31 19:00:08 1969 > [...] > This shows a 1 hour difference between the expected and > actual results - which looks like a timezone issue. > > As the changes for 1.5.25 include numerous references to > timezone handling changes, I suspect there may be some > re-entrancy bug in those changes. Corinna Vinschen wrote: > It would be more helpful if you would send self-contained code which > doesn't have to be tweaked to do a test. I'm not a perl developer, so > it took me some time to get it running. I'd also really prefer > testcases in plain C which I can simply run under GDB. Interpreter code > just adds unnecessary complexity. I was working on this when I got your email. Attached. > I assume the perl libs are using localtime_r, right? Otherwise you > can't rely on reentrency nor thread-safety. Anyway, localtime is > supposed to be thread-safe in Cygwin. I believe this is correct. > The only change in 1.5.25 related to localtime is the fact that the > environment variable "TZ" is now left alone by Cygwin. Up to 1.5.24 the > function tzset() (called by localtime()) also sets the environment > variable "TZ", which is apparently incorrect according to POSIX. "TZ" > is used in later calls to decide whether some other code has to be run > or not. > > And exactly that's the problem. Since TZ is now never set, that other > code, which is not thread-safe, is called much more frequent than > necessary. Actually it should only be called once per process, now it's > called once per invocation of tzset(). I've applied a patch to the 1.5.x > branch and will release an updated 1.5.25 in the next couple of days. Hope my test program helps to verify this.
Attachment:
loctim_bug.c
Description: Text document
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |