summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsr2013-07-17 13:57:54 +0200
committersr2013-07-17 13:57:54 +0200
commit04f5acf26c68533b8d447d4a77be6be4191f27ad (patch)
tree58b6329787a871e67b702c7534cada595b388727
parentReplace all pthread_spin_* calls with spin_*, so that all locking can be trac... (diff)
downloaddnbd3-04f5acf26c68533b8d447d4a77be6be4191f27ad.tar.gz
dnbd3-04f5acf26c68533b8d447d4a77be6be4191f27ad.tar.xz
dnbd3-04f5acf26c68533b8d447d4a77be6be4191f27ad.zip
Remove all glib dependencies from server
-rw-r--r--CMakeLists.txt2
-rw-r--r--src/serialize.c4
-rw-r--r--src/server/globals.c2
-rw-r--r--src/server/globals.h3
-rw-r--r--src/server/helper.c2
-rw-r--r--src/server/image.c42
-rw-r--r--src/server/image.h2
-rw-r--r--src/server/net.c3
-rw-r--r--src/server/server.c19
-rw-r--r--src/server/server.h1
-rw-r--r--src/server/sockhelper.c1
-rw-r--r--src/types.h14
12 files changed, 52 insertions, 43 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8f0183e..f33c744 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@ TARGET_LINK_LIBRARIES(dnbd3-client ${GLIB_LDFLAGS})
FILE(GLOB_RECURSE SERVER_SRCS src/server/*.c)
ADD_EXECUTABLE(dnbd3-server ${SERVER_SRCS})
-TARGET_LINK_LIBRARIES(dnbd3-server ${CMAKE_THREAD_LIBS_INIT} ${GLIB_LDFLAGS} ${ZLIB_LIBRARIES})
+TARGET_LINK_LIBRARIES(dnbd3-server ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
diff --git a/src/serialize.c b/src/serialize.c
index e67939e..b2be8fc 100644
--- a/src/serialize.c
+++ b/src/serialize.c
@@ -1,9 +1,7 @@
#include "serialize.h"
#include "types.h"
-#ifndef MIN
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#endif
+
void serializer_reset_read(serialized_buffer_t *buffer, size_t data_len)
{
diff --git a/src/server/globals.c b/src/server/globals.c
index 4a62dd6..bfc682b 100644
--- a/src/server/globals.c
+++ b/src/server/globals.c
@@ -1,6 +1,6 @@
#include "globals.h"
+#include "../types.h"
#include <stddef.h>
-#include <glib/gmacros.h>
char *_basePath = NULL;
int _vmdkLegacyMode = FALSE;
diff --git a/src/server/globals.h b/src/server/globals.h
index 0047a06..4d1ee4b 100644
--- a/src/server/globals.h
+++ b/src/server/globals.h
@@ -5,7 +5,6 @@
#include <stdint.h>
#include <time.h>
#include <pthread.h>
-#include <glib/gslist.h>
// ######### All structs/types used by the server ########
@@ -68,7 +67,7 @@ typedef struct
pthread_t thread;
dnbd3_image_t *image;
pthread_spinlock_t lock;
- GSList *sendqueue; // list of dnbd3_binstring_t*
+ //GSList *sendqueue; // list of dnbd3_binstring_t*
} dnbd3_client_t;
// #######################################################
diff --git a/src/server/helper.c b/src/server/helper.c
index 747dafe..dc83fb4 100644
--- a/src/server/helper.c
+++ b/src/server/helper.c
@@ -2,8 +2,8 @@
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
-#include <glib/gmacros.h>
#include <fcntl.h>
+#include "../types.h"
#include "../config.h"
/**
diff --git a/src/server/image.c b/src/server/image.c
index 8a01c9a..3e24b86 100644
--- a/src/server/image.c
+++ b/src/server/image.c
@@ -4,7 +4,6 @@
#include "uplink.h"
#include "locks.h"
-#include <glib/gmacros.h>
#include <assert.h>
#include <stdio.h>
#include <fcntl.h>
@@ -26,7 +25,6 @@ pthread_spinlock_t _images_lock;
static int image_load_all_internal(char *base, char *path);
static int image_try_load(char *base, char *path);
static int image_check_blocks_crc32(int fd, uint32_t *crc32list, int *blocks);
-static dnbd3_image_t* image_free(dnbd3_image_t *image);
// ##########################################
@@ -72,6 +70,7 @@ int image_is_complete(dnbd3_image_t *image)
int image_save_cache_map(dnbd3_image_t *image)
{
if ( image == NULL || image->cache_map == NULL ) return TRUE;
+ assert( image->path != NULL );
char mapfile[strlen( image->path ) + 4 + 1];
int fd;
strcpy( mapfile, image->path );
@@ -172,6 +171,7 @@ void image_release(dnbd3_image_t *image)
/**
* Remove image from images array. Only free it if it has
* no active users
+ * Locks on: _images_lock, image[].lock
*/
void image_remove(dnbd3_image_t *image)
{
@@ -188,6 +188,28 @@ void image_remove(dnbd3_image_t *image)
}
/**
+ * Free image. DOES NOT check if it's in use.
+ * DOES NOT lock on anything.
+ * DO NOT lock on the image when calling.
+ */
+dnbd3_image_t* image_free(dnbd3_image_t *image)
+{
+ assert( image != NULL );
+ //
+ image_save_cache_map( image );
+ free( image->cache_map );
+ free( image->crc32 );
+ free( image->path );
+ free( image->lower_name );
+ uplink_shutdown( image->uplink );
+ spin_destroy( &image->lock );
+ //
+ memset( image, 0, sizeof(dnbd3_image_t) );
+ free( image );
+ return NULL ;
+}
+
+/**
* Load all images in given path recursively.
* Pass NULL to use path from config.
*/
@@ -472,22 +494,6 @@ static int image_check_blocks_crc32(int fd, uint32_t *crc32list, int *blocks)
return TRUE;
}
-static dnbd3_image_t* image_free(dnbd3_image_t *image)
-{
- assert( image != NULL );
- //
- free( image->cache_map );
- free( image->crc32 );
- free( image->path );
- free( image->lower_name );
- uplink_shutdown( image->uplink );
- spin_destroy( &image->lock );
- //
- memset( image, 0, sizeof(dnbd3_image_t) );
- free( image );
- return NULL ;
-}
-
/*
void image_find_latest()
{
diff --git a/src/server/image.h b/src/server/image.h
index c776361..d0b482c 100644
--- a/src/server/image.h
+++ b/src/server/image.h
@@ -16,6 +16,8 @@ dnbd3_image_t* image_get(char *name, uint16_t revision);
void image_release(dnbd3_image_t *image);
+dnbd3_image_t* image_free(dnbd3_image_t *image);
+
int image_load_all(char *path);
diff --git a/src/server/net.c b/src/server/net.c
index 4efdc00..7fab6b9 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -36,6 +36,7 @@
#include "memlog.h"
#include "../serialize.h"
#include "../config.h"
+#include "../types.h"
#include "locks.h"
static inline char recv_request_header(int sock, dnbd3_request_t *request)
@@ -345,6 +346,7 @@ void *net_client_handler(void *dnbd3_client)
}
+ /*
// Check for messages that have been queued from another thread
while ( client->sendqueue != NULL ) {
dnbd3_binstring_t *message = NULL;
@@ -357,6 +359,7 @@ void *net_client_handler(void *dnbd3_client)
send_data( client->sock, message->data, message->len );
free( message );
}
+ */
}
}
diff --git a/src/server/server.c b/src/server/server.c
index a4aaa1c..38635c9 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -122,19 +122,7 @@ void dnbd3_cleanup()
// Clean up images
spin_lock( &_images_lock );
for (i = 0; i < _num_images; ++i) {
- dnbd3_image_t *image = _images[i];
- spin_lock( &image->lock );
- // save cache maps to files
- image_save_cache_map( image );
- // free uplink connection
- uplink_shutdown( image->uplink );
- // free other stuff
- free( image->cache_map );
- free( image->path );
- free( image->lower_name );
- _images[i] = NULL;
- spin_unlock( &image->lock );
- free( image );
+ _images[i] = image_free( _images[i] );
}
_num_images = 0;
spin_unlock( &_images_lock );
@@ -345,12 +333,13 @@ void dnbd3_remove_client(dnbd3_client_t *client)
*/
dnbd3_client_t* dnbd3_free_client(dnbd3_client_t *client)
{
- GSList *it;
spin_lock( &client->lock );
+ /*
for (it = client->sendqueue; it; it = it->next) {
free( it->data );
}
g_slist_free( client->sendqueue );
+ */
if ( client->sock >= 0 ) close( client->sock );
client->sock = -1;
if ( client->image != NULL ) image_release( client->image );
@@ -406,5 +395,5 @@ static void dnbd3_handle_sigterm(int signum)
void dnbd3_handle_sigusr1(int signum)
{
memlogf( "INFO: SIGUSR1 (%s) received, re-scanning image directory", strsignal( signum ) );
- image_load_all(NULL);
+ image_load_all( NULL );
}
diff --git a/src/server/server.h b/src/server/server.h
index 8c068a9..ced760d 100644
--- a/src/server/server.h
+++ b/src/server/server.h
@@ -23,7 +23,6 @@
#include <stdint.h>
#include <stdio.h>
-#include <glib.h>
#include "../config.h"
#include "../types.h"
diff --git a/src/server/sockhelper.c b/src/server/sockhelper.c
index 4c7c45b..dfbe5e3 100644
--- a/src/server/sockhelper.c
+++ b/src/server/sockhelper.c
@@ -2,7 +2,6 @@
#include "memlog.h"
#include <string.h>
#include <stdio.h>
-#include <glib/gmacros.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
diff --git a/src/types.h b/src/types.h
index a8d567d..810fbed 100644
--- a/src/types.h
+++ b/src/types.h
@@ -26,6 +26,20 @@
#include <stdint.h>
#endif
+#ifndef TRUE
+#define TRUE (1)
+#endif
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+#ifndef MIN
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
// ioctl
#define DNBD3_MAGIC 'd'
#define IOCTL_OPEN _IO(0xab, 1)