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