From 04f5acf26c68533b8d447d4a77be6be4191f27ad Mon Sep 17 00:00:00 2001 From: sr Date: Wed, 17 Jul 2013 13:57:54 +0200 Subject: Remove all glib dependencies from server --- src/serialize.c | 4 +--- src/server/globals.c | 2 +- src/server/globals.h | 3 +-- src/server/helper.c | 2 +- src/server/image.c | 42 ++++++++++++++++++++++++------------------ src/server/image.h | 2 ++ src/server/net.c | 3 +++ src/server/server.c | 19 ++++--------------- src/server/server.h | 1 - src/server/sockhelper.c | 1 - src/types.h | 14 ++++++++++++++ 11 files changed, 51 insertions(+), 42 deletions(-) (limited to 'src') 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 -#include 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 #include #include -#include // ######### 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 #include #include -#include #include +#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 #include #include #include @@ -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) { @@ -187,6 +187,28 @@ void image_remove(dnbd3_image_t *image) spin_unlock( &_images_lock ); } +/** + * 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 #include -#include #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 #include -#include #include #include #include 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 #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) -- cgit v1.2.3-55-g7522