diff options
Diffstat (limited to 'winsup/cygwin/sync.h')
-rw-r--r-- | winsup/cygwin/sync.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/winsup/cygwin/sync.h b/winsup/cygwin/sync.h index 9cd50c3ac..3ae09373f 100644 --- a/winsup/cygwin/sync.h +++ b/winsup/cygwin/sync.h @@ -10,17 +10,20 @@ This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ +#ifndef _SYNC_H +#define _SYNC_H /* FIXME: Note that currently this class cannot be allocated via `new' since there are issues with malloc and fork. */ class muto { + static DWORD exiting_thread; LONG sync; /* Used to serialize access to this class. */ LONG visits; /* Count of number of times a thread has called acquire. */ LONG waiters; /* Number of threads waiting for lock. */ HANDLE bruteforce; /* event handle used to control waiting for lock. */ DWORD tid; /* Thread Id of lock owner. */ public: - class muto *next; + // class muto *next; const char *name; /* The real constructor. */ @@ -37,6 +40,8 @@ public: DWORD owner () {return tid;} int unstable () {return !tid && (sync || waiters >= 0);} void reset () __attribute__ ((regparm (1))); + bool acquired (); + static void set_exiting_thread () {exiting_thread = GetCurrentThreadId ();} }; extern muto muto_start; @@ -44,6 +49,14 @@ extern muto muto_start; /* Use a statically allocated buffer as the storage for a muto */ #define new_muto(__name) \ ({ \ - static muto __name##_storage __attribute__((nocommon)) __attribute__((section(".data_cygwin_nocopy"))); \ + static muto __name##_storage __attribute__((nocommon)) __attribute__((section(".data_cygwin_nocopy1"))); \ __name = __name##_storage.init (#__name); \ }) + +/* Use a statically allocated buffer as the storage for a muto */ +#define new_muto1(__name, __storage) \ +({ \ + static muto __storage __attribute__((nocommon)) __attribute__((section(".data_cygwin_nocopy1"))); \ + __name = __storage.init (#__name); \ +}) +#endif /*_SYNC_H*/ |