summaryrefslogtreecommitdiffstats
path: root/src/server/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/server.c')
-rw-r--r--src/server/server.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/server/server.c b/src/server/server.c
index 8981d77..28da0ae 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -36,7 +36,7 @@
#include "ipc.h"
#include "memlog.h"
-int _sock;
+static int sock;
#ifdef _DEBUG
int _fake_delay = 0;
#endif
@@ -45,6 +45,7 @@ pthread_spinlock_t _spinlock;
GSList *_dnbd3_clients = NULL;
char *_config_file_name = DEFAULT_SERVER_CONFIG_FILE;
char *_local_namespace = NULL;
+char *_ipc_password = NULL;
GSList *_dnbd3_images = NULL; // of dnbd3_image_t
void dnbd3_print_help(char* argv_0)
@@ -75,7 +76,8 @@ void dnbd3_cleanup()
int fd;
memlogf("INFO: Cleanup...\n");
- close(_sock);
+ close(sock);
+ sock = -1;
dnbd3_ipc_shutdown();
@@ -108,11 +110,12 @@ void dnbd3_cleanup()
close(fd);
}
- free(image->name);
- g_free(image->file);
- g_free(image->cache_file);
- free(image->cache_map);
- g_free(image);
+ free(image->cache_map);
+ free(image->config_group);
+ free(image->low_name);
+ free(image->file);
+ free(image->cache_file);
+ g_free(image);
}
g_slist_free(_dnbd3_images);
@@ -202,12 +205,13 @@ int main(int argc, char* argv[])
signal(SIGINT, dnbd3_handle_sigterm);
// setup network
- _sock = dnbd3_setup_socket();
- if (_sock < 0)
+ sock = dnbd3_setup_socket();
+ if (sock < 0)
exit(EXIT_FAILURE);
struct sockaddr_in client;
unsigned int len = sizeof(client);
int fd;
+ time_t next_delete_invocation = 0;
struct timeval timeout;
timeout.tv_sec = SOCKET_TIMEOUT_SERVER;
timeout.tv_usec = 0;
@@ -221,7 +225,7 @@ int main(int argc, char* argv[])
// main loop
while (1)
{
- fd = accept(_sock, (struct sockaddr*) &client, &len);
+ fd = accept(sock, (struct sockaddr*) &client, &len);
if (fd < 0)
{
memlogf("[ERROR] Accept failure");
@@ -263,6 +267,13 @@ int main(int argc, char* argv[])
continue;
}
pthread_detach(dnbd3_client->thread);
+ // Call image deletion function if last call is more than 5 minutes ago
+ const time_t now = time(NULL);
+ if (now < next_delete_invocation)
+ {
+ next_delete_invocation = now + 300;
+ dnbd3_exec_delete(TRUE);
+ }
}
dnbd3_cleanup();