Hi,

I think Cygwin 1.7 has a concurrency issue with the shared state initialization 
- which we experience because we use Cygwin in a probably untypical fashion:

We call from a non-Cygwin shell a non-Cygwin gnumake. The Makefile rules mostly 
call a non-Cygwin C compiler and linker. However Makefile rules calling gawk, 
cat, cp, echo, mkdir, rm, sed, sh, ... are calling Cygwin executables.

If (and only if) we run gnumake in this scenario with the --jobs option to 
perform a parallel build then we experience sporadic failures of the Cygwin 
executables. Fortunately these failures still happen now and then when running 
them with strace. So it was quite easy to find out that the shared variable 
installation_root isn't correctly initialized when things go wrong.

Checking out src/winsup/cygwin/shared.cc I stumbled over these lines

    /* Initialize installation root dir. */
     if (!installation_root[0])
       init_installation_root ();

and thought that things might go wrong because several processes are calling 
into init_installation_root() at the same time and was wondering why there's no 
kind of locking in place. I don't want to claim that this is the very root 
cause of the issue. However I tried to keep a Cygwin shell open in another 
window while running gnumake in order to have a stable shared state present for 
all Cygwin executables. I can definitively confirm that this shell makes in our 
scenario the difference between sporadic failure and smooth operation of the 
Cygwin executables.

I'm sorry that I don't have a simple reproducible test case but I'm sure that 
there IS a problem in that area - and it seems quite reasonable because
a) the code in question is quite new
b) most Cygwin users/testers most probable have some Cygwin executable 
constantly running or
c) don't start Cygwin executables in parallel thousand of times

Thanks in advance for your consideration.

Regards, Oliver Schmidt



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to