summaryrefslogtreecommitdiff
path: root/src/lib/batch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/batch.c')
-rw-r--r--src/lib/batch.c27
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;
}