SQLiteDatabaseTracker.cpp [plain text]
#include "config.h"
#include "SQLiteDatabaseTracker.h"
#include <wtf/StdLibExtras.h>
#include <wtf/ThreadingPrimitives.h>
namespace WebCore {
namespace SQLiteDatabaseTracker {
static SQLiteDatabaseTrackerClient* s_staticSQLiteDatabaseTrackerClient = 0;
static unsigned s_transactionInProgressCounter = 0;
static Mutex& transactionInProgressMutex()
{
DEFINE_STATIC_LOCAL(Mutex, tipMutex, ());
return tipMutex;
}
void setClient(SQLiteDatabaseTrackerClient* client)
{
ASSERT(client);
ASSERT(!s_staticSQLiteDatabaseTrackerClient || s_staticSQLiteDatabaseTrackerClient == client);
s_staticSQLiteDatabaseTrackerClient = client;
}
void incrementTransactionInProgressCount()
{
if (!s_staticSQLiteDatabaseTrackerClient)
return;
MutexLocker lock(transactionInProgressMutex());
s_transactionInProgressCounter++;
if (s_transactionInProgressCounter == 1)
s_staticSQLiteDatabaseTrackerClient->willBeginFirstTransaction();
}
void decrementTransactionInProgressCount()
{
if (!s_staticSQLiteDatabaseTrackerClient)
return;
MutexLocker lock(transactionInProgressMutex());
ASSERT(s_transactionInProgressCounter);
s_transactionInProgressCounter--;
if (s_transactionInProgressCounter == 0)
s_staticSQLiteDatabaseTrackerClient->didFinishLastTransaction();
}
#if !ASSERT_DISABLED
bool hasTransactionInProgress()
{
return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0;
}
#endif // !ASSERT_DISABLED
}
}