Ticket UUID: | 597728 | |||
Title: | mt-unsafe tzset() gets called improperly | |||
Type: | Bug | Version: | obsolete: 8.3.4 | |
Submitter: | vasiljevic | Created on: | 2002-08-20 12:09:43 | |
Subsystem: | 06. Time Measurement | Assigned To: | kennykb | |
Priority: | 8 | Severity: | ||
Status: | Closed | Last Modified: | 2003-02-04 03:30:22 | |
Resolution: | Fixed | Closed By: | kennykb | |
Closed on: | 2003-02-03 20:30:22 | |||
Description: |
Sun Solaris (2.5.1+) build gets configured with undefined HAVE_TZSET *and* undefined HAVE_TM_ZONE. This leads to multiple threads calling the MT-unsafe tzset() function in tclClock.c which brings MT-enabled Tcl shell to core. This happens for at least Tcl8.3.4 (and maybe lower) and for Tcl8.4a4 and (probably) others as well. The wording from FormatClock() function in tclClock.c:272 says: /* * Some systems forgot to call tzset in localtime, make sure its done. */ So I think, the Sun Solaris should also be included in this list. This should be changed in the tcl.m4 which already covers this case for ULTRIX-4-* and OSF1-V* systems. | |||
User Comments: |
kennykb added on 2003-02-04 03:30:22:
Logged In: YES user_id=99768 Hmm, I thought I closed this one when I committed the change. Anyway, I did commit the change. Really. vasiljevic added on 2002-09-04 03:00:15: Logged In: YES user_id=95086 Sorry. You are right. I think I was still sleeping when I did this. Please ignore. The whole point can be simplified as this: For platforms having *both* HAVE_TM_ZONE and HAVE_TZSET *not* defined, the code enters the tzset()function unprotected. This results in subtle and difficult to find bugs which again result in core. It is pretty clear from the code that tzset will be entered twice for the !defined(HAVE_TM_ZONE) && !defined(WIN32) platforms, with Sun Solaris being one of them. It is pretty late here and I have no 8.4 patch ready. I did the change in my 8.3.4 copy and did not correctly moved it to 8.4 in the file I've posted. If you can wait until tomorrow I will prepare new one, otherwise you can just lock this part yourself. It is really trivial. hobbs added on 2002-09-04 02:27:53: Logged In: YES user_id=72656 This patch looks suspicious. First, it is a reverse patch. But the problem is that it adds a mutex lock around an existing one, without handling the existing case. It also uses 'format' in the TclpStrftime where a dstring was used before. It looks perhaps like this wasn't exactly diffed against the 8.4 (or 8.3) cvs head. Or am I missing something? vasiljevic added on 2002-09-04 00:27:43: File Added - 30364: tclClock.c.diff Logged In: YES user_id=95086 Please take a look at attached diff. This is output of "diff -u" and is done on the current HEAD. hobbs added on 2002-09-03 02:23:03: Logged In: YES user_id=72656 I can't make this match any code in 8.3.4-cvs or 8.4. Could you please make a -u diff out of it, preferrably on the head? vasiljevic added on 2002-08-20 19:32:45: File Added - 29418: tclClock.c.diff vasiljevic added on 2002-08-20 19:31:58: Logged In: YES user_id=95086 Attached is a cvs diff between the original and my patched version. The diff is taken against Tcl8.3.4 core distro. |
Attachments:
- tclClock.c.diff [download] added by vasiljevic on 2002-09-04 00:27:43. [details]