* globals.cc (__isthreaded): New global variable. Explain what it's

used for.
	* miscfuncs.cc (thread_wrapper): Set __isthreaded to 1 here.
This commit is contained in:
Corinna Vinschen 2013-05-21 18:53:23 +00:00
parent cc4a1b830d
commit 3e8d2576fd
3 changed files with 16 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2013-05-21 Corinna Vinschen <corinna@vinschen.de>
* globals.cc (__isthreaded): New global variable. Explain what it's
used for.
* miscfuncs.cc (thread_wrapper): Set __isthreaded to 1 here.
2013-05-21 Corinna Vinschen <corinna@vinschen.de> 2013-05-21 Corinna Vinschen <corinna@vinschen.de>
* fhandler.h (class fhandler_dev_random): Change type of pseudo to * fhandler.h (class fhandler_dev_random): Change type of pseudo to

View File

@ -75,6 +75,13 @@ bool detect_bloda = false;
bool NO_COPY in_forkee; bool NO_COPY in_forkee;
/* Taken from BSD libc:
This variable is zero until a process has created a pthread. It is used
to avoid calling locking functions in libc when they are not required.
Note that this is moderately dangerous. Do not rely on it if the public
API is also used from a non-pthread thread like the signal thread. */
int NO_COPY __isthreaded = 0;
int __argc_safe; int __argc_safe;
int __argc; int __argc;
char **__argv; char **__argv;

View File

@ -473,6 +473,9 @@ thread_wrapper (PVOID arg)
if (!arg) if (!arg)
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
/* The process is now threaded. Note the fact for later usage. */
__isthreaded = 1;
/* Fetch thread wrapper info and free from cygheap. */ /* Fetch thread wrapper info and free from cygheap. */
thread_wrapper_arg wrapper_arg = *(thread_wrapper_arg *) arg; thread_wrapper_arg wrapper_arg = *(thread_wrapper_arg *) arg;
cfree (arg); cfree (arg);