* localtime.cc (tzset): Guard by a muto for thread safety.
This commit is contained in:
parent
3623cfa399
commit
ea5bc3721f
|
@ -1,3 +1,7 @@
|
|||
2007-12-11 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* localtime.cc (tzset): Guard by a muto for thread safety.
|
||||
|
||||
2007-12-11 Dave Korn <dave.korn@artimi.com>
|
||||
|
||||
* cygheap.cc (_csbrk): Don't request zero bytes from VirtualAlloc,
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "winsup.h"
|
||||
#include "cygerrno.h"
|
||||
#include "sync.h"
|
||||
#include <windows.h>
|
||||
#define STD_INSPIRED
|
||||
#define lint
|
||||
|
@ -1470,19 +1471,22 @@ tzsetwall P((void))
|
|||
settzname();
|
||||
}
|
||||
|
||||
static NO_COPY muto tzset_guard;
|
||||
|
||||
extern "C" void
|
||||
tzset P((void))
|
||||
{
|
||||
tzset_guard.init ("tzset_guard")->acquire ();
|
||||
const char * name = getenv("TZ");
|
||||
|
||||
if (name == NULL) {
|
||||
if (!lcl_is_set)
|
||||
tzsetwall();
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0)
|
||||
return;
|
||||
goto out;
|
||||
lcl_is_set = (strlen(name) < sizeof (lcl_TZname));
|
||||
if (lcl_is_set)
|
||||
strcpy(lcl_TZname, name);
|
||||
|
@ -1492,7 +1496,7 @@ tzset P((void))
|
|||
lclptr = (struct state *) malloc(sizeof *lclptr);
|
||||
if (lclptr == NULL) {
|
||||
settzname(); /* all we can do */
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* defined ALL_STATE */
|
||||
|
@ -1510,6 +1514,8 @@ tzset P((void))
|
|||
gmtload(lclptr);
|
||||
}
|
||||
settzname();
|
||||
out:
|
||||
tzset_guard.release ();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue