1.1 --- a/extensions/sqlite/driver/SqDriver.cpp Sun Oct 28 05:06:12 2007 +0000
1.2 +++ b/extensions/sqlite/driver/SqDriver.cpp Sun Oct 28 05:48:06 2007 +0000
1.3 @@ -67,11 +67,14 @@
1.4 {
1.5 m_Handle = BAD_HANDLE;
1.6 m_pOpenLock = NULL;
1.7 + m_bThreadSafe = false;
1.8 }
1.9
1.10 void SqDriver::Initialize()
1.11 {
1.12 m_pOpenLock = threader->MakeMutex();
1.13 +
1.14 + InitializeThreadSafety();
1.15 }
1.16
1.17 void SqDriver::Shutdown()
1.18 @@ -80,6 +83,11 @@
1.19 {
1.20 m_pOpenLock->DestroyThis();
1.21 }
1.22 +
1.23 + if (m_bThreadSafe)
1.24 + {
1.25 + sqlite3_enable_shared_cache(0);
1.26 + }
1.27 }
1.28
1.29 bool SqDriver::IsThreadSafe()
1.30 @@ -89,10 +97,23 @@
1.31
1.32 bool SqDriver::InitializeThreadSafety()
1.33 {
1.34 - /* sqlite should be thread safe if the locks are done right.
1.35 - * we don't enable the "shared cache" because it can corrupt
1.36 - * open databases!
1.37 - */
1.38 + if (m_bThreadSafe)
1.39 + {
1.40 + return true;
1.41 + }
1.42 +
1.43 + if (sqlite3_threadsafe() == 0)
1.44 + {
1.45 + return false;
1.46 + }
1.47 +
1.48 + if (sqlite3_enable_shared_cache(1) != SQLITE_OK)
1.49 + {
1.50 + return false;
1.51 + }
1.52 +
1.53 + m_bThreadSafe = true;
1.54 +
1.55 return true;
1.56 }
1.57