Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / native_client / src / shared / platform / nacl_interruptible_mutex.h
1 /*
2  * Copyright 2008 The Native Client Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
6
7 /*
8  * NaCl Server Runtime interruptible binary mutex, based on nacl_sync
9  * interface.
10  */
11 #ifndef NATIVE_CLIENT_SRC_TRUSTED_PLATFORM_NACL_INTERRUPTIBLE_MUTEX_H_
12 #define NATIVE_CLIENT_SRC_TRUSTED_PLATFORM_NACL_INTERRUPTIBLE_MUTEX_H_
13
14 #include "native_client/src/include/nacl_base.h"
15 #include "native_client/src/shared/platform/nacl_sync.h"
16
17 EXTERN_C_BEGIN
18
19 enum NaClIntrMutexState {
20   NACL_INTR_LOCK_FREE,
21   NACL_INTR_LOCK_HELD,
22   NACL_INTR_LOCK_INTERRUPTED
23 };
24
25 struct NaClIntrMutex {
26   /* public */
27   enum NaClIntrMutexState lock_state;
28
29   /* private */
30   struct NaClMutex    mu;
31   struct NaClCondVar  cv;
32 };
33
34 int NaClIntrMutexCtor(struct NaClIntrMutex  *mp);
35 /* bool success/fail */
36
37 void NaClIntrMutexDtor(struct NaClIntrMutex *mp);
38
39 NaClSyncStatus NaClIntrMutexLock(struct NaClIntrMutex  *mp);
40
41 NaClSyncStatus NaClIntrMutexTryLock(struct NaClIntrMutex *mp);
42
43 NaClSyncStatus NaClIntrMutexUnlock(struct NaClIntrMutex *mp);
44
45 void NaClIntrMutexIntr(struct NaClIntrMutex  *mp);
46
47 void NaClIntrMutexReset(struct NaClIntrMutex *mp);
48
49 EXTERN_C_END
50
51
52 #endif  /* NATIVE_CLIENT_SRC_TRUSTED_PLATFORM_NACL_INTERRUPTIBLE_MUTEX_H_ */