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