Create thread for groups (not from treadpool)
authorJeroen van der Heijden <jeroen@transceptor.technology>
Mon, 7 Jan 2019 08:25:14 +0000 (09:25 +0100)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Mon, 7 Jan 2019 08:25:14 +0000 (09:25 +0100)
include/siri/db/groups.h
include/siri/siri.h
src/siri/db/db.c
src/siri/db/groups.c

index 523ed731a1fbbe2c80605df464e6ad47c76bd9b3..1af1feed6adbaff3711c9028acaaae929c658d50 100644 (file)
@@ -41,7 +41,7 @@ typedef struct siridb_groups_s siridb_groups_t;
 #include <siri/net/pkg.h>
 
 siridb_groups_t * siridb_groups_new(siridb_t * siridb);
-void siridb_groups_start(siridb_groups_t * groups);
+void siridb_groups_start(siridb_t * siridb);
 int siridb_groups_save(siridb_groups_t * groups);
 ssize_t siridb_groups_get_file(char ** buffer, siridb_t * siridb);
 void siridb_groups_init_nseries(siridb_groups_t * groups);
@@ -72,6 +72,6 @@ struct siridb_groups_s
     vec_t * nseries;  /* list of series we need to assign to groups */
     vec_t * ngroups;  /* list of groups which need initialization */
     uv_mutex_t mutex;
-    uv_work_t work;
+    uv_thread_t thread;
 };
 #endif  /* SIRIDB_GROUPS_H_ */
index add8a439dcf098b7b29501cd7303b45328911856..aa615da9bb169c32cee2f0e2ab3b410ea56a17d8 100644 (file)
@@ -17,7 +17,7 @@
 #define PCRE2_CODE_UNIT_WIDTH 8
 
 #define SIRI_MAX_SIZE_ERR_MSG 1024
-#define MAX_NUMBER_DB 4
+#define MAX_NUMBER_DB 1024
 
 typedef enum
 {
index 2c35e7db82220866f222185c27a7a4c0759e4b69..f4f4d1e6e6a9ca453175d6a726dcc427e88bd5fa 100644 (file)
@@ -264,7 +264,7 @@ siridb_t * siridb_new(const char * dbpath, int lock_flags)
     uv_mutex_unlock(&siri.siridb_mutex);
 
     /* start groups update thread */
-    siridb_groups_start(siridb->groups);
+    siridb_groups_start(siridb);
 
     /* start tasks */
     siridb_tasks_init(&siridb->tasks);
index 16fe0049f54416a4540cb16271c24cbbacca37b4..6c9703317fda047131400b445adf2b1c8323542f 100644 (file)
@@ -49,7 +49,7 @@ static int GROUPS_load(siridb_groups_t * groups);
 static void GROUPS_free(siridb_groups_t * groups);
 static int GROUPS_pkg(siridb_group_t * group, qp_packer_t * packer);
 static int GROUPS_nseries(siridb_group_t * group, void * data);
-static void GROUPS_loop(uv_work_t * work);
+static void GROUPS_loop(void * arg);
 static void GROUPS_loop_finish(uv_work_t * work, int status);
 static int GROUPS_write(siridb_group_t * group, qp_fpacker_t * fpacker);
 static void GROUPS_init_groups(siridb_t * siridb);
@@ -76,7 +76,6 @@ siridb_groups_t * siridb_groups_new(siridb_t * siridb)
         groups->nseries = vec_new(VEC_DEFAULT_SIZE);
         groups->ngroups = vec_new(VEC_DEFAULT_SIZE);
         uv_mutex_init(&groups->mutex);
-        groups->work.data = (siridb_t *) siridb;
 
         if (!groups->groups || !groups->nseries || !groups->ngroups)
         {
@@ -108,13 +107,9 @@ siridb_groups_t * siridb_groups_new(siridb_t * siridb)
 /*
  * Start group thread.
  */
-void siridb_groups_start(siridb_groups_t * groups)
+void siridb_groups_start(siridb_t * siridb)
 {
-    uv_queue_work(
-            siri.loop,
-            &groups->work,
-            GROUPS_loop,
-            GROUPS_loop_finish);
+    uv_thread_create(&siridb->groups->thread, GROUPS_loop, siridb);
 }
 
 /*
@@ -414,13 +409,12 @@ static int GROUPS_2vec(siridb_group_t * group, vec_t * groups_list)
 }
 
 
-
 /*
  * Group thread.
  */
-static void GROUPS_loop(uv_work_t * work)
+static void GROUPS_loop(void * arg)
 {
-    siridb_t * siridb = (siridb_t *) work->data;
+    siridb_t * siridb = arg;
     siridb_groups_t * groups = siridb->groups;
     uint64_t mod_test = 0;
 
@@ -464,18 +458,6 @@ static void GROUPS_loop(uv_work_t * work)
     }
 
     groups->status = GROUPS_CLOSED;
-}
-
-static void GROUPS_loop_finish(
-        uv_work_t * work,
-        int status __attribute__((unused)))
-{
-    /*
-     * Main Thread
-     */
-    siridb_t * siridb = (siridb_t *) work->data;
-
-    /* decrement groups reference counter */
     siridb_groups_decref(siridb->groups);
 }