From: cgf Date: Wed, 4 May 2005 01:20:05 +0000 (+0000) Subject: * shared.cc (user_shared_initialize): Rework locking so that nothing is checked X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=c5980a8928c63d79f55ada17a79d6290837e12b9;p=pf3gnuchains%2Fpf3gnuchains3x.git * shared.cc (user_shared_initialize): Rework locking so that nothing is checked until cb is non-zero. --- diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc index dcb26a9afe..b1b4dc41a4 100644 --- a/winsup/cygwin/shared.cc +++ b/winsup/cygwin/shared.cc @@ -189,23 +189,20 @@ user_shared_initialize (bool reinit) /* Initialize the Cygwin per-user shared, if necessary */ if (!sversion) { - user_shared->version = USER_VERSION_MAGIC; debug_printf ("initializing user shared"); - user_shared->cb = sizeof (*user_shared); - if (user_shared->cb != sizeof (*user_shared)) - system_printf ("size of user shared region changed from %u to %u", - sizeof (*user_shared), user_shared->cb); user_shared->mountinfo.init (); /* Initialize the mount table. */ - /* Initialize the queue of deleted files. */ - user_shared->delqueue.init (); + user_shared->delqueue.init (); /* Initialize the queue of deleted files. */ + user_shared->cb = sizeof (*user_shared); } - else if (user_shared->version != USER_VERSION_MAGIC) - multiple_cygwin_problem ("user shared memory version", user_shared->version, USER_VERSION_MAGIC); - else if (user_shared->cb != sizeof (*user_shared)) - multiple_cygwin_problem ("user shared memory size", user_shared->cb, sizeof (*user_shared)); else + { while (!user_shared->cb) low_priority_sleep (0); // Should be hit only very very rarely + if (user_shared->version != sversion) + multiple_cygwin_problem ("user shared memory version", user_shared->version, sversion); + else if (user_shared->cb != sizeof (*user_shared)) + multiple_cygwin_problem ("user shared memory size", user_shared->cb, sizeof (*user_shared)); + } } void