From e6067a953d0c8093a4e9127b32aeaca8dab5eb31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sun, 30 Aug 2015 07:34:35 +0000 Subject: [PATCH] External locking for SQLite3DB() Closes #368 --- include/sqlite3db.h | 7 +++++++ lib/sqlite3db.cpp | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/sqlite3db.h b/include/sqlite3db.h index 7c8c3869d..261868f26 100644 --- a/include/sqlite3db.h +++ b/include/sqlite3db.h @@ -138,6 +138,7 @@ class SQLite3DB { private: char *url; sqlite3 *db; + rwlock_t rwlock; public: char *get_url() const { return url; } sqlite3 *get_db() const { return db; } @@ -145,6 +146,12 @@ class SQLite3DB { SQLite3DB(); ~SQLite3DB(); int open(char *, int); + + void rdlock(); + void rdunlock(); + void wrlock(); + void wrunlock(); + bool execute(const char *); bool execute_statement(const char *, char **, int *, int *, SQLite3_result **); int return_one_int(const char *); diff --git a/lib/sqlite3db.cpp b/lib/sqlite3db.cpp index 0b7f7d8fb..630c75d48 100644 --- a/lib/sqlite3db.cpp +++ b/lib/sqlite3db.cpp @@ -7,6 +7,7 @@ SQLite3DB::SQLite3DB() { db=NULL; url=NULL; assert_on_error=0; + spinlock_rwlock_init(&rwlock); } SQLite3DB::~SQLite3DB() { @@ -161,3 +162,18 @@ bool SQLite3DB::check_and_build_table(char *table_name, char *table_def) { return rcb; } +void SQLite3DB::rdlock() { + spin_wrlock(&rwlock); +} + +void SQLite3DB::rdunlock() { + spin_wrunlock(&rwlock); +} + +void SQLite3DB::wrlock() { + spin_wrlock(&rwlock); +} + +void SQLite3DB::wrunlock() { + spin_wrunlock(&rwlock); +}