mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-22 13:25:04 +00:00
Serialize some data writes.
This commit is contained in:
parent
90838f07c6
commit
4eec215729
1 changed files with 16 additions and 1 deletions
17
data.c
17
data.c
|
@ -14,13 +14,16 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
double disk_layout = 2.7;
|
double disk_layout = 2.7;
|
||||||
|
|
||||||
|
/* storage serializer */
|
||||||
|
pthread_mutex_t data_mutex = {0};
|
||||||
|
|
||||||
int snac_upgrade(d_char **error);
|
int snac_upgrade(d_char **error);
|
||||||
|
|
||||||
|
|
||||||
int srv_open(char *basedir, int auto_upgrade)
|
int srv_open(char *basedir, int auto_upgrade)
|
||||||
/* opens a server */
|
/* opens a server */
|
||||||
{
|
{
|
||||||
|
@ -29,6 +32,8 @@ int srv_open(char *basedir, int auto_upgrade)
|
||||||
FILE *f;
|
FILE *f;
|
||||||
d_char *error = NULL;
|
d_char *error = NULL;
|
||||||
|
|
||||||
|
pthread_mutex_init(&data_mutex, NULL);
|
||||||
|
|
||||||
srv_basedir = xs_str_new(basedir);
|
srv_basedir = xs_str_new(basedir);
|
||||||
|
|
||||||
if (xs_endswith(srv_basedir, "/"))
|
if (xs_endswith(srv_basedir, "/"))
|
||||||
|
@ -121,6 +126,8 @@ void srv_free(void)
|
||||||
xs_free(srv_basedir);
|
xs_free(srv_basedir);
|
||||||
xs_free(srv_config);
|
xs_free(srv_config);
|
||||||
xs_free(srv_baseurl);
|
xs_free(srv_baseurl);
|
||||||
|
|
||||||
|
pthread_mutex_destroy(&data_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -250,6 +257,8 @@ int index_add_md5(const char *fn, const char *md5)
|
||||||
int status = 201; /* Created */
|
int status = 201; /* Created */
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&data_mutex);
|
||||||
|
|
||||||
if ((f = fopen(fn, "a")) != NULL) {
|
if ((f = fopen(fn, "a")) != NULL) {
|
||||||
flock(fileno(f), LOCK_EX);
|
flock(fileno(f), LOCK_EX);
|
||||||
|
|
||||||
|
@ -262,6 +271,8 @@ int index_add_md5(const char *fn, const char *md5)
|
||||||
else
|
else
|
||||||
status = 500;
|
status = 500;
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&data_mutex);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,6 +291,8 @@ int index_del_md5(const char *fn, const char *md5)
|
||||||
int status = 404;
|
int status = 404;
|
||||||
FILE *i, *o;
|
FILE *i, *o;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&data_mutex);
|
||||||
|
|
||||||
if ((i = fopen(fn, "r")) != NULL) {
|
if ((i = fopen(fn, "r")) != NULL) {
|
||||||
flock(fileno(i), LOCK_EX);
|
flock(fileno(i), LOCK_EX);
|
||||||
|
|
||||||
|
@ -309,6 +322,8 @@ int index_del_md5(const char *fn, const char *md5)
|
||||||
else
|
else
|
||||||
status = 500;
|
status = 500;
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&data_mutex);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue