From fda6c2145323f8cce05015aabd07cc41d754f4cd Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Thu, 18 Feb 2021 21:12:43 +0700
Subject: [PATCH] [*] Fixed notify server [+] Close sqlite3 on exit

---
 .../server/notify_server/src/dap_notify_srv.c |  4 ++++
 .../dap_chain_global_db_driver_sqlite.c       | 24 ++++++++++++++-----
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/dap-sdk/net/server/notify_server/src/dap_notify_srv.c b/dap-sdk/net/server/notify_server/src/dap_notify_srv.c
index efab63b63c..b324fb7d5d 100644
--- a/dap-sdk/net/server/notify_server/src/dap_notify_srv.c
+++ b/dap-sdk/net/server/notify_server/src/dap_notify_srv.c
@@ -118,6 +118,8 @@ struct dap_events_socket * dap_notify_server_create_inter()
  */
 int dap_notify_server_send_f_inter(uint32_t a_worker_id, const char * a_format,...)
 {
+    if(!s_notify_server_queue_inter) // If not initialized - nothing to notify
+        return 0;
     if(a_worker_id>= dap_events_worker_get_count()){
         log_it(L_ERROR,"Wrong worker id %u for send_f_inter() function", a_worker_id);
         return -10;
@@ -139,6 +141,8 @@ int dap_notify_server_send_f_inter(uint32_t a_worker_id, const char * a_format,.
  */
 int dap_notify_server_send_f_mt(const char * a_format,...)
 {
+    if(!s_notify_server_queue) // If not initialized - nothing to notify
+        return 0;
     va_list va;
     va_start(va, a_format);
     size_t l_str_size=dap_vsnprintf(NULL,0,a_format,va);
diff --git a/modules/global-db/dap_chain_global_db_driver_sqlite.c b/modules/global-db/dap_chain_global_db_driver_sqlite.c
index 56854f8354..e912aad9d3 100644
--- a/modules/global-db/dap_chain_global_db_driver_sqlite.c
+++ b/modules/global-db/dap_chain_global_db_driver_sqlite.c
@@ -121,11 +121,13 @@ int dap_db_driver_sqlite_init(const char *a_filename_db, dap_db_driver_callbacks
 
 int dap_db_driver_sqlite_deinit(void)
 {
-    pthread_rwlock_wrlock(&s_db_rwlock);
-    dap_db_driver_sqlite_close(s_db);
-    pthread_rwlock_unlock(&s_db_rwlock);
-    s_db = NULL;
-    return sqlite3_shutdown();
+    if (s_db){
+        pthread_rwlock_wrlock(&s_db_rwlock);
+        dap_db_driver_sqlite_close(s_db);
+        pthread_rwlock_unlock(&s_db_rwlock);
+        s_db = NULL;
+        return sqlite3_shutdown();
+    }
 }
 
 // additional function for sqlite to convert byte to number
@@ -514,7 +516,9 @@ char *dap_db_driver_sqlite_make_table_name(const char *a_group_name)
  */
 int dap_db_driver_sqlite_apply_store_obj(dap_store_obj_t *a_store_obj)
 {
-    if(!a_store_obj || !a_store_obj->group)
+    if ( !s_db)
+        return -666;
+    if(!a_store_obj || !a_store_obj->group )
         return -1;
     char *l_query = NULL;
     char *l_error_message = NULL;
@@ -632,6 +636,9 @@ static void fill_one_item(const char *a_group, dap_store_obj_t *a_obj, SQLITE_RO
  */
 dap_store_obj_t* dap_db_driver_sqlite_read_last_store_obj(const char *a_group)
 {
+    if ( !s_db)
+        return -666;
+
     dap_store_obj_t *l_obj = NULL;
     char *l_error_message = NULL;
     sqlite3_stmt *l_res;
@@ -681,6 +688,8 @@ dap_store_obj_t* dap_db_driver_sqlite_read_cond_store_obj(const char *a_group, u
     sqlite3_stmt *l_res;
     if(!a_group)
         return NULL;
+    if ( !s_db)
+        return -666;
 
     char * l_table_name = dap_db_driver_sqlite_make_table_name(a_group);
     // no limit
@@ -753,6 +762,9 @@ dap_store_obj_t* dap_db_driver_sqlite_read_store_obj(const char *a_group, const
     sqlite3_stmt *l_res;
     if(!a_group)
         return NULL;
+    if ( !s_db)
+        return -666;
+
     char * l_table_name = dap_db_driver_sqlite_make_table_name(a_group);
     // no limit
     uint64_t l_count_out = 0;
-- 
GitLab