diff options
| author | rpj <rpj> | 2001-02-08 16:31:20 +0000 | 
|---|---|---|
| committer | rpj <rpj> | 2001-02-08 16:31:20 +0000 | 
| commit | 2b3eede0b834a82c7dce5ec328f3929c0effc536 (patch) | |
| tree | 24414750f16e0c7bc7d231139d7f20a76b512ae4 /implement.h | |
| parent | 3c0fbfafe563b7b312d60c42c0d58a3a1f4d5930 (diff) | |
Fixes to new mutex routines and various tests.exp-2001-02-09-passed
Diffstat (limited to 'implement.h')
| -rw-r--r-- | implement.h | 39 | 
1 files changed, 32 insertions, 7 deletions
diff --git a/implement.h b/implement.h index 353f4f9..165708a 100644 --- a/implement.h +++ b/implement.h @@ -121,19 +121,34 @@ struct pthread_attr_t_ {  #define PTW32_OBJECT_AUTO_INIT ((void *) -1)  #define PTW32_OBJECT_INVALID   NULL -struct pthread_mutex_t_ { -  HANDLE mutex; +/* + * Our own critical section type, used + * when the system doesn't support TryEnterCriticalSection() + */ +typedef struct ptw32_cs_t_ { +  int valid; +  pthread_t owner; +  long lock_idx; +  long entered_count; +} ptw32_cs_t; + +typedef union ptw32_cs_u_t_ {    CRITICAL_SECTION cs; -  int lockCount; -  pthread_t ownerThread; -}; - +  ptw32_cs_t csFake; +} ptw32_cs_u_t;  struct pthread_mutexattr_t_ {    int pshared; -  int forcecs; +  int type;  }; +struct pthread_mutex_t_ { +  ptw32_cs_u_t cs; +  int lockCount; +  int pshared; +  int type; +  pthread_t ownerThread; +};  struct pthread_key_t_ {    DWORD key; @@ -365,6 +380,16 @@ BOOL ptw32_increase_semaphore(sem_t * sem,                                   unsigned int n);  #endif /* NEED_SEM */ +int ptw32_InitializeCriticalSection (ptw32_cs_u_t *); + +void ptw32_DeleteCriticalSection (ptw32_cs_u_t *); + +void ptw32_EnterCriticalSection (ptw32_cs_u_t *); + +void ptw32_LeaveCriticalSection (ptw32_cs_u_t *); + +BOOL ptw32_TryEnterCriticalSection (ptw32_cs_u_t *); +  #ifdef __cplusplus  }  #endif /* __cplusplus */  | 
