From 73e227959e02c3484085ce05c466a3ea0f3e5065 Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Sat, 11 Feb 2012 01:34:07 +0100 Subject: [SERVER] Spinlocks to freeze threads while reloading config --- src/server/utils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/server/utils.c') 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 #include #include +#include #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) -- cgit v1.2.3-55-g7522