diff options
author | drh <drh@noemail.net> | 2010-05-13 20:19:17 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2010-05-13 20:19:17 +0000 |
commit | 72339a3e241dd15e20623ecb7fb94670ddee2afc (patch) | |
tree | ed683bfb701929601ff5555cbddf775836ddf289 /src/mutex_w32.c | |
parent | 5cccc940cc293f1ba39481ef5c196f2e61500959 (diff) | |
download | sqlite-72339a3e241dd15e20623ecb7fb94670ddee2afc.tar.gz sqlite-72339a3e241dd15e20623ecb7fb94670ddee2afc.zip |
Make debugging elements of the sqlite3_mutex object volatile and make them
only appear when compiling with SQLITE_DEBUG. Ticket [51914f6acd2cb462].
FossilOrigin-Name: e823c60ca4c3d515b8b12dada4631fe8f44975e9
Diffstat (limited to 'src/mutex_w32.c')
-rw-r--r-- | src/mutex_w32.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mutex_w32.c b/src/mutex_w32.c index 237d24eff..7f0fd04e6 100644 --- a/src/mutex_w32.c +++ b/src/mutex_w32.c @@ -25,9 +25,9 @@ struct sqlite3_mutex { CRITICAL_SECTION mutex; /* Mutex controlling the lock */ int id; /* Mutex type */ - int nRef; /* Number of enterances */ - DWORD owner; /* Thread holding this mutex */ #ifdef SQLITE_DEBUG + volatile int nRef; /* Number of enterances */ + volatile DWORD owner; /* Thread holding this mutex */ int trace; /* True to trace changes */ #endif }; @@ -35,7 +35,7 @@ struct sqlite3_mutex { #ifdef SQLITE_DEBUG #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 } #else -#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0 } +#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 } #endif /* @@ -191,7 +191,9 @@ static sqlite3_mutex *winMutexAlloc(int iType){ case SQLITE_MUTEX_RECURSIVE: { p = sqlite3MallocZero( sizeof(*p) ); if( p ){ +#ifdef SQLITE_DEBUG p->id = iType; +#endif InitializeCriticalSection(&p->mutex); } break; @@ -201,7 +203,9 @@ static sqlite3_mutex *winMutexAlloc(int iType){ assert( iType-2 >= 0 ); assert( iType-2 < ArraySize(winMutex_staticMutexes) ); p = &winMutex_staticMutexes[iType-2]; +#ifdef SQLITE_DEBUG p->id = iType; +#endif break; } } @@ -234,12 +238,14 @@ static void winMutexFree(sqlite3_mutex *p){ ** more than once, the behavior is undefined. */ static void winMutexEnter(sqlite3_mutex *p){ +#ifdef SQLITE_DEBUG DWORD tid = GetCurrentThreadId(); assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) ); +#endif EnterCriticalSection(&p->mutex); +#ifdef SQLITE_DEBUG p->owner = tid; p->nRef++; -#ifdef SQLITE_DEBUG if( p->trace ){ printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef); } @@ -288,11 +294,11 @@ static int winMutexTry(sqlite3_mutex *p){ static void winMutexLeave(sqlite3_mutex *p){ #ifndef NDEBUG DWORD tid = GetCurrentThreadId(); -#endif assert( p->nRef>0 ); assert( p->owner==tid ); p->nRef--; assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE ); +#endif LeaveCriticalSection(&p->mutex); #ifdef SQLITE_DEBUG if( p->trace ){ |