Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/shared.cc')
-rw-r--r--winsup/cygwin/shared.cc23
1 files changed, 12 insertions, 11 deletions
diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc
index 03118daf0..4a2489222 100644
--- a/winsup/cygwin/shared.cc
+++ b/winsup/cygwin/shared.cc
@@ -417,7 +417,7 @@ memory_init (bool init_cygheap)
cygheap->user.init ();
}
- /* Initialize general shared memory */
+ /* Initialize general shared memory under spinlock control */
for (;;)
{
LONG smi = InterlockedExchange (&shared_mem_inited, -1);
@@ -437,16 +437,17 @@ memory_init (bool init_cygheap)
cygwin_shared_h,
sizeof (*cygwin_shared),
SH_CYGWIN_SHARED);
- if (!smi)
- {
- cygwin_shared->initialize ();
- /* Defer debug output printing the installation root and installation key
- up to this point. Debug output except for system_printf requires
- the global shared memory to exist. */
- debug_printf ("Installation root: <%W> key: <%S>",
- installation_root, &installation_key);
- smi = 1;
- }
+ if (!smi)
+ {
+ cygwin_shared->initialize ();
+ /* Defer debug output printing the installation root and installation key
+ up to this point. Debug output except for system_printf requires
+ the global shared memory to exist. */
+ debug_printf ("Installation root: <%W> key: <%S>",
+ installation_root, &installation_key);
+ smi = 1;
+ }
+
InterlockedExchange (&shared_mem_inited, smi);
break;
}