extensions/sqlite/driver/SqDriver.cpp
changeset 1645 27307df4d711
parent 1447 026bd03b77ae
child 1947 e73a1e51833b
     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