commit 4eec215
default
·
2023-02-23 08:32:47 +0000 UTC
parent 90838f0
Serialize some data writes.
1 files changed,
+16,
-1
M
data.c
M
data.c
+16,
-1
1@@ -14,13 +14,16 @@
2 #include <sys/stat.h>
3 #include <sys/file.h>
4 #include <fcntl.h>
5-
6+#include <pthread.h>
7
8 double disk_layout = 2.7;
9
10+/* storage serializer */
11+pthread_mutex_t data_mutex = {0};
12
13 int snac_upgrade(d_char **error);
14
15+
16 int srv_open(char *basedir, int auto_upgrade)
17 /* opens a server */
18 {
19@@ -29,6 +32,8 @@ int srv_open(char *basedir, int auto_upgrade)
20 FILE *f;
21 d_char *error = NULL;
22
23+ pthread_mutex_init(&data_mutex, NULL);
24+
25 srv_basedir = xs_str_new(basedir);
26
27 if (xs_endswith(srv_basedir, "/"))
28@@ -121,6 +126,8 @@ void srv_free(void)
29 xs_free(srv_basedir);
30 xs_free(srv_config);
31 xs_free(srv_baseurl);
32+
33+ pthread_mutex_destroy(&data_mutex);
34 }
35
36
37@@ -250,6 +257,8 @@ int index_add_md5(const char *fn, const char *md5)
38 int status = 201; /* Created */
39 FILE *f;
40
41+ pthread_mutex_lock(&data_mutex);
42+
43 if ((f = fopen(fn, "a")) != NULL) {
44 flock(fileno(f), LOCK_EX);
45
46@@ -262,6 +271,8 @@ int index_add_md5(const char *fn, const char *md5)
47 else
48 status = 500;
49
50+ pthread_mutex_unlock(&data_mutex);
51+
52 return status;
53 }
54
55@@ -280,6 +291,8 @@ int index_del_md5(const char *fn, const char *md5)
56 int status = 404;
57 FILE *i, *o;
58
59+ pthread_mutex_lock(&data_mutex);
60+
61 if ((i = fopen(fn, "r")) != NULL) {
62 flock(fileno(i), LOCK_EX);
63
64@@ -309,6 +322,8 @@ int index_del_md5(const char *fn, const char *md5)
65 else
66 status = 500;
67
68+ pthread_mutex_unlock(&data_mutex);
69+
70 return status;
71 }
72