SQLiteDatabaseTracker.cpp [plain text]
#include "config.h"
#include "SQLiteDatabaseTracker.h"
#include <mutex>
#include <wtf/Lock.h>
namespace WebCore {
namespace SQLiteDatabaseTracker {
static SQLiteDatabaseTrackerClient* s_staticSQLiteDatabaseTrackerClient = nullptr;
static unsigned s_transactionInProgressCounter = 0;
static Lock transactionInProgressMutex;
void setClient(SQLiteDatabaseTrackerClient* client)
{
std::lock_guard<Lock> lock(transactionInProgressMutex);
s_staticSQLiteDatabaseTrackerClient = client;
}
void incrementTransactionInProgressCount()
{
std::lock_guard<Lock> lock(transactionInProgressMutex);
if (!s_staticSQLiteDatabaseTrackerClient)
return;
s_transactionInProgressCounter++;
if (s_transactionInProgressCounter == 1)
s_staticSQLiteDatabaseTrackerClient->willBeginFirstTransaction();
}
void decrementTransactionInProgressCount()
{
std::lock_guard<Lock> lock(transactionInProgressMutex);
if (!s_staticSQLiteDatabaseTrackerClient)
return;
ASSERT(s_transactionInProgressCounter);
s_transactionInProgressCounter--;
if (!s_transactionInProgressCounter)
s_staticSQLiteDatabaseTrackerClient->didFinishLastTransaction();
}
bool hasTransactionInProgress()
{
std::lock_guard<Lock> lock(transactionInProgressMutex);
return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0;
}
}
}