From aa8f0c5c437f83fa5445e47db5756f7ca373605f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Thu, 8 Jun 2017 21:34:06 +0200 Subject: [PATCH] Remove spinlock from class SQLite3DB #977 --- include/sqlite3db.h | 6 +++++- lib/sqlite3db.cpp | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) 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() {