[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