diff --git a/include/sqlite3db.h b/include/sqlite3db.h index 234bbdfec..0414a2c0d 100644 --- a/include/sqlite3db.h +++ b/include/sqlite3db.h @@ -2,7 +2,7 @@ #define __CLASS_SQLITE3DB_H #include "proxysql.h" #include "cpp.h" - +#define PROXYSQL_SQLITE3DB_PTHREAD_MUTEX class SQLite3_row { public: @@ -166,7 +166,11 @@ class SQLite3DB { private: char *url; sqlite3 *db; +#ifdef PROXYSQL_SQLITE3DB_PTHREAD_MUTEX + pthread_rwlock_t rwlock; +#else rwlock_t rwlock; +#endif public: char *get_url() const { return url; } sqlite3 *get_db() const { return db; } diff --git a/lib/sqlite3db.cpp b/lib/sqlite3db.cpp index 2bf522604..a0acf366b 100644 --- a/lib/sqlite3db.cpp +++ b/lib/sqlite3db.cpp @@ -8,7 +8,11 @@ SQLite3DB::SQLite3DB() { db=NULL; url=NULL; assert_on_error=0; +#ifdef PROXYSQL_SQLITE3DB_PTHREAD_MUTEX + pthread_rwlock_init(&rwlock, NULL); +#else spinlock_rwlock_init(&rwlock); +#endif } SQLite3DB::~SQLite3DB() { @@ -217,19 +221,35 @@ bool SQLite3DB::check_and_build_table(char *table_name, char *table_def) { } void SQLite3DB::rdlock() { +#ifdef PROXYSQL_SQLITE3DB_PTHREAD_MUTEX + pthread_rwlock_rdlock(&rwlock); +#else spin_wrlock(&rwlock); +#endif } void SQLite3DB::rdunlock() { +#ifdef PROXYSQL_SQLITE3DB_PTHREAD_MUTEX + pthread_rwlock_unlock(&rwlock); +#else spin_wrunlock(&rwlock); +#endif } void SQLite3DB::wrlock() { +#ifdef PROXYSQL_SQLITE3DB_PTHREAD_MUTEX + pthread_rwlock_wrlock(&rwlock); +#else spin_wrlock(&rwlock); +#endif } void SQLite3DB::wrunlock() { +#ifdef PROXYSQL_SQLITE3DB_PTHREAD_MUTEX + pthread_rwlock_unlock(&rwlock); +#else spin_wrunlock(&rwlock); +#endif } int64_t SQLite3_result::raw_checksum() {