diff options
author | Johann Latocha | 2012-02-11 01:34:07 +0100 |
---|---|---|
committer | Johann Latocha | 2012-02-11 01:34:07 +0100 |
commit | 73e227959e02c3484085ce05c466a3ea0f3e5065 (patch) | |
tree | b588d5dfb6d2645c721a6dbfe414a21119d4116e /src/server/utils.c | |
parent | [SERVER] Config reload fixed (diff) | |
download | dnbd3-73e227959e02c3484085ce05c466a3ea0f3e5065.tar.gz dnbd3-73e227959e02c3484085ce05c466a3ea0f3e5065.tar.xz dnbd3-73e227959e02c3484085ce05c466a3ea0f3e5065.zip |
[SERVER] Spinlocks to freeze threads while reloading config
Diffstat (limited to 'src/server/utils.c')
-rw-r--r-- | src/server/utils.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/server/utils.c b/src/server/utils.c index 3091b2f..be0b584 100644 --- a/src/server/utils.c +++ b/src/server/utils.c @@ -21,6 +21,7 @@ #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> +#include <pthread.h> #include "server.h" #include "utils.h" @@ -72,15 +73,21 @@ void dnbd3_load_config(char *file) void dnbd3_reload_config(char* config_file_name) { - _num_images = 0; GSList *iterator = NULL; for (iterator = _dnbd3_clients; iterator; iterator = iterator->next) { dnbd3_client_t *client = iterator->data; + pthread_spin_lock(&client->spinlock); client->image = NULL; } + _num_images = 0; free(_images); dnbd3_load_config(config_file_name); + for (iterator = _dnbd3_clients; iterator; iterator = iterator->next) + { + dnbd3_client_t *client = iterator->data; + pthread_spin_unlock(&client->spinlock); + } } dnbd3_image_t* dnbd3_get_image(int vid, int rid) |