diff --git a/Makefile b/Makefile index 84273b0b..0a6b7c65 100644 --- a/Makefile +++ b/Makefile @@ -221,6 +221,7 @@ $(SQLITE_OBJS): CFLAGS += \ -DSQLITE_DBCONFIG_DEFAULT_DEFENSIVE \ -DSQLITE_ENABLE_FTS5 \ -DSQLITE_ENABLE_JSON1 \ + -DSQLITE_THREADSAFE=1 \ -DSQLITE_MAX_LENGTH=5242880 \ -DSQLITE_MAX_SQL_LENGTH=100000 \ -DSQLITE_MAX_COLUMN=100 \ diff --git a/src/ssb.c b/src/ssb.c index 51bed2b2..859818a6 100644 --- a/src/ssb.c +++ b/src/ssb.c @@ -2148,6 +2148,7 @@ sqlite3* tf_ssb_acquire_db_reader(tf_ssb_t* ssb) else { sqlite3_open_v2(ssb->db_path, &db, SQLITE_OPEN_READONLY, NULL); + tf_ssb_db_init_reader(db); } uv_mutex_unlock(&ssb->db_readers_lock); return db; diff --git a/src/ssb.db.c b/src/ssb.db.c index e57ad8f1..92bd2d54 100644 --- a/src/ssb.db.c +++ b/src/ssb.db.c @@ -53,10 +53,16 @@ static bool _tf_ssb_db_has_rows(sqlite3* db, const char* query) static void _tf_ssb_db_init_internal(sqlite3* db) { + sqlite3_extended_result_codes(db, 1); _tf_ssb_db_exec(db, "PRAGMA journal_mode = WAL"); _tf_ssb_db_exec(db, "PRAGMA synchronous = NORMAL"); } +void tf_ssb_db_init_reader(sqlite3* db) +{ + _tf_ssb_db_init_internal(db); +} + void tf_ssb_db_init(tf_ssb_t* ssb) { sqlite3* db = tf_ssb_get_db(ssb); diff --git a/src/ssb.db.h b/src/ssb.db.h index ae75d972..b2ffa347 100644 --- a/src/ssb.db.h +++ b/src/ssb.db.h @@ -8,6 +8,7 @@ typedef struct _tf_ssb_t tf_ssb_t; void tf_ssb_db_init(tf_ssb_t* ssb); +void tf_ssb_db_init_reader(sqlite3* db); bool tf_ssb_db_store_message(tf_ssb_t* ssb, JSContext* context, const char* id, JSValue val, const char* signature, bool sequence_before_author); bool tf_ssb_db_message_content_get(tf_ssb_t* ssb, const char* id, uint8_t** out_blob, size_t* out_size); bool tf_ssb_db_blob_has(tf_ssb_t* ssb, const char* id);