[R] eval.c: possible issue with profiling for Windows
Thomas Hoffmann
thoffman at zappa.sax.de
Fri Nov 23 22:43:04 CET 2001
I see a possible problem with the "wait" parameter for the profiler
thread:
static void R_InitProfiling(char * filename, int append, double
dinterval)
{
int wait;
Here is the (automatic) variable.
HANDLE Proc = GetCurrentProcess();
..........
wait = interval/1000;
if(!(ProfileEvent = CreateEvent(NULL, FALSE, FALSE, NULL)) ||
(_beginthread(ProfileThread, 0, &wait) == -1))
Here the address of wait is given to the thread
R_Suicide("unable to create profiling thread");
R_Profiling = 1;
Here you leave your function, invalidating "wait" by freeing its memory.
}
Depending on the compiler (and/or hardware!) used, this can lead to a
race
condition: You have invalidated "wait" by leaving R_InitProfiling,
before
your new thread had a chance to copy it to its local storage.
One can either implement a semaphore handshake here (parent waits untils
the
thread has copied "wait" and then posted an event semaphore), or one can
of course simply make "wait" static.
(This concerns R 1.3.1, because I use a 33kb modem line: forget this
mail if
this has changed in newer release (or if it's a wrong conclusion, of
course)).
--
Thomas Hoffmann Telephone:
49-351-4598831
thoffman at zappa.sax.de Dresden,
Germany
..sig under construction ...
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list