diff options
Diffstat (limited to 'src/lib/batch.c')
-rw-r--r-- | src/lib/batch.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/lib/batch.c b/src/lib/batch.c index 91def77..b8b7629 100644 --- a/src/lib/batch.c +++ b/src/lib/batch.c @@ -2,7 +2,6 @@ #include <string.h> #include <stdlib.h> #include <threads.h> -#include <stdatomic.h> #include "mdb.h" @@ -16,7 +15,7 @@ char *setkey_str; mtx_t setkey_mtx; int setkeys(tablist_t **list, char *pair) { - int rc; + int rc = 0; setkey_copy = calloc(list[0]->len, sizeof(tablist_t)); memcpy(setkey_copy, *list, list[0]->len * sizeof(tablist_t)); setkey_str = pair; @@ -28,9 +27,10 @@ int setkeys(tablist_t **list, char *pair) for (int i = 0; i < setkey_copy[0].len; ++i) thrd_create(&thrds[i], setkey_helper, clone(i)); for (int i = 0; i < setkey_copy[0].len; ++i) { - thrd_join(thrds[i], &rc); if (rc) - break; + thrd_join(thrds[i], NULL); + else + thrd_join(thrds[i], &rc); } if (!rc) memcpy(*list, setkey_copy, setkey_copy[0].len * sizeof(tablist_t)); @@ -45,7 +45,7 @@ char *delkey_str; mtx_t delkey_mtx; int delkeys(tablist_t *list, char *key) { - int rc; + int rc = 0; delkey_copy = calloc(list[0].len, sizeof(tablist_t)); memcpy(delkey_copy, list, list[0].len * sizeof(tablist_t)); delkey_str = key; @@ -57,9 +57,10 @@ int delkeys(tablist_t *list, char *key) for (int i = 0; i < delkey_copy[0].len; ++i) thrd_create(&thrds[i], delkey_helper, clone(i)); for (int i = 0; i < delkey_copy[0].len; ++i) { - thrd_join(thrds[i], &rc); if (rc) - break; + thrd_join(thrds[i], NULL); + else + thrd_join(thrds[i], &rc); } if (!rc) memcpy(list, delkey_copy, delkey_copy[0].len * sizeof(tablist_t)); @@ -70,27 +71,27 @@ int delkeys(tablist_t *list, char *key) static int setkey_helper(void *thr_data) { - int *id = (int *) thr_data; - int rc; + int rc = 0; - mtx_lock(&setkey_mtx); + mtx_lock(&setkey_mtx); + int *id = (int *) thr_data; rc = setkey(&setkey_copy, *id, setkey_str); + free(id); mtx_unlock(&setkey_mtx); - free(id); return rc; } static int delkey_helper(void *thr_data) { - int *id = (int *) thr_data; int rc; mtx_lock(&delkey_mtx); + int *id = (int *) thr_data; rc = delkey(delkey_copy, *id, delkey_str); + free(id); mtx_unlock(&delkey_mtx); - free(id); return rc; } |