Snapshot of upstream SQLite 3.43.2
[sqlcipher.git] / src / mutex.h
bloba6806a2505900b821b6389c8f5f17ec33e8ef8fe
1 /*
2 ** 2007 August 28
3 **
4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing:
6 **
7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give.
11 *************************************************************************
13 ** This file contains the common header for all mutex implementations.
14 ** The sqliteInt.h header #includes this file so that it is available
15 ** to all source files. We break it out in an effort to keep the code
16 ** better organized.
18 ** NOTE: source files should *not* #include this header file directly.
19 ** Source files should #include the sqliteInt.h file and let that file
20 ** include this one indirectly.
25 ** Figure out what version of the code to use. The choices are
27 ** SQLITE_MUTEX_OMIT No mutex logic. Not even stubs. The
28 ** mutexes implementation cannot be overridden
29 ** at start-time.
31 ** SQLITE_MUTEX_NOOP For single-threaded applications. No
32 ** mutual exclusion is provided. But this
33 ** implementation can be overridden at
34 ** start-time.
36 ** SQLITE_MUTEX_PTHREADS For multi-threaded applications on Unix.
38 ** SQLITE_MUTEX_W32 For multi-threaded applications on Win32.
40 #if !SQLITE_THREADSAFE
41 # define SQLITE_MUTEX_OMIT
42 #endif
43 #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP)
44 # if SQLITE_OS_UNIX
45 # define SQLITE_MUTEX_PTHREADS
46 # elif SQLITE_OS_WIN
47 # define SQLITE_MUTEX_W32
48 # else
49 # define SQLITE_MUTEX_NOOP
50 # endif
51 #endif
53 #ifdef SQLITE_MUTEX_OMIT
55 ** If this is a no-op implementation, implement everything as macros.
57 #define sqlite3_mutex_alloc(X) ((sqlite3_mutex*)8)
58 #define sqlite3_mutex_free(X)
59 #define sqlite3_mutex_enter(X)
60 #define sqlite3_mutex_try(X) SQLITE_OK
61 #define sqlite3_mutex_leave(X)
62 #define sqlite3_mutex_held(X) ((void)(X),1)
63 #define sqlite3_mutex_notheld(X) ((void)(X),1)
64 #define sqlite3MutexAlloc(X) ((sqlite3_mutex*)8)
65 #define sqlite3MutexInit() SQLITE_OK
66 #define sqlite3MutexEnd()
67 #define MUTEX_LOGIC(X)
68 #else
69 #define MUTEX_LOGIC(X) X
70 int sqlite3_mutex_held(sqlite3_mutex*);
71 #endif /* defined(SQLITE_MUTEX_OMIT) */