diff options
author | Simon Rettberg | 2015-11-21 12:24:21 +0100 |
---|---|---|
committer | Simon Rettberg | 2015-11-21 12:24:21 +0100 |
commit | 4c94cb861dfbfe2a8c9c165165cbdbc062eaa39b (patch) | |
tree | 5ef29b28a920626b572a0d6dd378440ddb7f885b /src/server | |
parent | [SERVER] Improve image related locking (diff) | |
download | dnbd3-4c94cb861dfbfe2a8c9c165165cbdbc062eaa39b.tar.gz dnbd3-4c94cb861dfbfe2a8c9c165165cbdbc062eaa39b.tar.xz dnbd3-4c94cb861dfbfe2a8c9c165165cbdbc062eaa39b.zip |
[FUSE] Start refactoring so we can handle multithread fuse
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/altservers.c | 4 | ||||
-rw-r--r-- | src/server/image.c | 4 | ||||
-rw-r--r-- | src/server/locks.c | 2 | ||||
-rw-r--r-- | src/server/signal.c | 52 | ||||
-rw-r--r-- | src/server/signal.h | 49 | ||||
-rw-r--r-- | src/server/threadpool.c | 2 | ||||
-rw-r--r-- | src/server/uplink.c | 4 |
7 files changed, 8 insertions, 109 deletions
diff --git a/src/server/altservers.c b/src/server/altservers.c index 99cbdec..8eb07ec 100644 --- a/src/server/altservers.c +++ b/src/server/altservers.c @@ -6,9 +6,9 @@ #include "helper.h" #include "globals.h" #include "image.h" -#include "signal.h" +#include "../shared/signal.h" #include "log.h" -#include "../protocol.h" +#include "../shared/protocol.h" #include <stdlib.h> #include <unistd.h> #include <sys/errno.h> diff --git a/src/server/image.c b/src/server/image.c index fccc2a9..6f2cb6a 100644 --- a/src/server/image.c +++ b/src/server/image.c @@ -5,11 +5,11 @@ #include "uplink.h" #include "locks.h" #include "integrity.h" -#include "../protocol.h" +#include "../shared/protocol.h" #include "sockhelper.h" #include "altservers.h" #include "server.h" -#include "signal.h" +#include "../shared/signal.h" #include <assert.h> #include <stdio.h> diff --git a/src/server/locks.c b/src/server/locks.c index 6c411e5..8c4fcfb 100644 --- a/src/server/locks.c +++ b/src/server/locks.c @@ -17,7 +17,7 @@ #include "globals.h" #include "log.h" #include "helper.h" -#include "signal.h" +#include "../shared/signal.h" #define MAXLOCKS 2000 #define MAXTHREADS 500 diff --git a/src/server/signal.c b/src/server/signal.c deleted file mode 100644 index a0697f8..0000000 --- a/src/server/signal.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "signal.h" -#include <sys/eventfd.h> -#include <poll.h> -#include <inttypes.h> -#include <errno.h> -#include <unistd.h> - -int signal_new() -{ - return eventfd( 0, EFD_NONBLOCK ); -} - -int signal_newBlocking() -{ - return eventfd( 0, 0 ); -} - -int signal_call(int signalFd) -{ - if ( signalFd < 0 ) return 0; - static uint64_t one = 1; - return write( signalFd, &one, sizeof one ) == sizeof one; -} - -int signal_wait(int signalFd, int timeoutMs) -{ - struct pollfd ps = { - .fd = signalFd, - .events = POLLIN - }; - int ret = poll( &ps, 1, timeoutMs ); - if ( ret == 0 ) return SIGNAL_TIMEOUT; - if ( ret == -1 ) return SIGNAL_ERROR; - if ( ps.revents & ( POLLERR | POLLNVAL ) ) return SIGNAL_ERROR; - return signal_clear( signalFd ); -} - -int signal_clear(int signalFd) -{ - uint64_t ret; - if ( read( signalFd, &ret, sizeof ret ) != sizeof ret ) { - if ( errno == EAGAIN ) return 0; - return SIGNAL_ERROR; - } - return (int)ret; -} - -void signal_close(int signalFd) -{ - close( signalFd ); -} - diff --git a/src/server/signal.h b/src/server/signal.h deleted file mode 100644 index 0e2f85f..0000000 --- a/src/server/signal.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _SIGNAL_H_ -#define _SIGNAL_H_ - -#define SIGNAL_OK (0) -#define SIGNAL_TIMEOUT (-2) -#define SIGNAL_ERROR (-1) - -/** - * Create a new signal fd (eventfd), nonblocking. - * @return >= 0 on success, which is the fd; < 0 on error - */ -int signal_new(); - -/** - * Create a new signal fd (eventfd), blocking. - * @return >= 0 on success, which is the fd; < 0 on error - */ -int signal_newBlocking(); - -/** - * Trigger the given signal, so a wait or clear call will succeed. - * @return SIGNAL_OK on success, SIGNAL_ERROR on error - */ -int signal_call(int signalFd); - -/** - * Wait for given signal, with an optional timeout. - * If timeout == 0, just poll once. - * If timeout < 0, wait forever. - * @return > 0 telling how many times the signal was called, - * SIGNAL_TIMEOUT if the timeout was reached, - * SIGNAL_ERROR if some error occured - */ -int signal_wait(int signalFd, int timeoutMs); - -/** - * Clears any pending signals on this signal fd. - * @return number of signals that were pending, - * SIGNAL_ERROR if some error occured - */ -int signal_clear(int signalFd); - -/** - * Close the given signal. - */ -void signal_close(int signalFd); - -#endif - diff --git a/src/server/threadpool.c b/src/server/threadpool.c index ad146ea..41f1f0b 100644 --- a/src/server/threadpool.c +++ b/src/server/threadpool.c @@ -1,7 +1,7 @@ #include "globals.h" #include "helper.h" #include "threadpool.h" -#include "signal.h" +#include "../shared/signal.h" #include "locks.h" #include <pthread.h> diff --git a/src/server/uplink.c b/src/server/uplink.c index aa72896..a205164 100644 --- a/src/server/uplink.c +++ b/src/server/uplink.c @@ -6,8 +6,8 @@ #include "helper.h" #include "altservers.h" #include "helper.h" -#include "../protocol.h" -#include "signal.h" +#include "../shared/protocol.h" +#include "../shared/signal.h" #include <pthread.h> #include <sys/socket.h> |