Change io lock and unlock to server error on failure
This commit is contained in:
32
src/client.c
32
src/client.c
@@ -294,34 +294,6 @@ void client_reply( struct client* client, struct nbd_request request )
|
||||
}
|
||||
|
||||
|
||||
int client_lock_io( struct client * client )
|
||||
{
|
||||
CLIENT_ERROR_ON_FAILURE(
|
||||
pthread_mutex_lock(&client->serve->l_io),
|
||||
"Problem with I/O lock"
|
||||
);
|
||||
|
||||
if (server_detect_closed(client->serve)) {
|
||||
CLIENT_ERROR_ON_FAILURE(
|
||||
pthread_mutex_unlock(&client->serve->l_io),
|
||||
"Problem with I/O unlock"
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void client_unlock_io( struct client * client )
|
||||
{
|
||||
CLIENT_ERROR_ON_FAILURE(
|
||||
pthread_mutex_unlock(&client->serve->l_io),
|
||||
"Problem with I/O unlock"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
int client_serve_request(struct client* client)
|
||||
{
|
||||
struct nbd_request request;
|
||||
@@ -332,9 +304,9 @@ int client_serve_request(struct client* client)
|
||||
return request_err;
|
||||
}
|
||||
|
||||
if ( client_lock_io( client ) ){
|
||||
if ( server_lock_io( client->serve ) ){
|
||||
client_reply( client, request );
|
||||
client_unlock_io( client );
|
||||
server_unlock_io( client->serve );
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
|
27
src/serve.c
27
src/serve.c
@@ -38,6 +38,33 @@ void server_dirty(struct server *serve, off64_t from, int len)
|
||||
bitset_set_range(serve->mirror->dirty_map, from, len);
|
||||
}
|
||||
|
||||
int server_lock_io( struct server * serve)
|
||||
{
|
||||
SERVER_ERROR_ON_FAILURE(
|
||||
pthread_mutex_lock(&serve->l_io),
|
||||
"Problem with I/O lock"
|
||||
);
|
||||
|
||||
if (server_detect_closed(serve)) {
|
||||
SERVER_ERROR_ON_FAILURE(
|
||||
pthread_mutex_unlock(&serve->l_io),
|
||||
"Problem with I/O unlock"
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void server_unlock_io( struct server* serve )
|
||||
{
|
||||
SERVER_ERROR_ON_FAILURE(
|
||||
pthread_mutex_unlock(&serve->l_io),
|
||||
"Problem with I/O unlock"
|
||||
);
|
||||
}
|
||||
|
||||
static int testmasks[9] = { 0,128,192,224,240,248,252,254,255 };
|
||||
|
||||
/** Test whether AF_INET or AF_INET6 sockaddr is included in the given access
|
||||
|
@@ -84,6 +84,8 @@ struct server {
|
||||
|
||||
int server_detect_closed(struct server* serve);
|
||||
void server_dirty(struct server *serve, off64_t from, int len);
|
||||
int server_lock_io( struct server * serve);
|
||||
void server_unlock_io( struct server* serve );
|
||||
void serve_signal_close( struct server *serve );
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user