Commit 001a4bd3 authored by lahiker42's avatar lahiker42

unlink on unix-domain server destroy


git-svn-id: https://protobuf-c.googlecode.com/svn/trunk@148 00440858-1255-0410-a3e6-75ea37f81c3a
parent 1f0a4127
...@@ -819,6 +819,7 @@ struct _ProtobufC_RPC_Server ...@@ -819,6 +819,7 @@ struct _ProtobufC_RPC_Server
ProtobufCDispatch *dispatch; ProtobufCDispatch *dispatch;
ProtobufCAllocator *allocator; ProtobufCAllocator *allocator;
ProtobufCService *underlying; ProtobufCService *underlying;
ProtobufC_RPC_AddressType address_type;
char *bind_name; char *bind_name;
ServerConnection *first_connection, *last_connection; ServerConnection *first_connection, *last_connection;
ProtobufC_FD listening_fd; ProtobufC_FD listening_fd;
...@@ -873,6 +874,7 @@ server_failed_literal (ProtobufC_RPC_Server *server, ...@@ -873,6 +874,7 @@ server_failed_literal (ProtobufC_RPC_Server *server,
server->error_handler (code, msg, server->error_handler_data); server->error_handler (code, msg, server->error_handler_data);
} }
#if 0
static void static void
server_failed (ProtobufC_RPC_Server *server, server_failed (ProtobufC_RPC_Server *server,
ProtobufC_RPC_Error_Code code, ProtobufC_RPC_Error_Code code,
...@@ -888,6 +890,7 @@ server_failed (ProtobufC_RPC_Server *server, ...@@ -888,6 +890,7 @@ server_failed (ProtobufC_RPC_Server *server,
server_failed_literal (server, code, buf); server_failed_literal (server, code, buf);
} }
#endif
static protobuf_c_boolean static protobuf_c_boolean
address_to_name (const struct sockaddr *addr, address_to_name (const struct sockaddr *addr,
...@@ -1170,6 +1173,7 @@ handle_server_listener_readable (int fd, ...@@ -1170,6 +1173,7 @@ handle_server_listener_readable (int fd,
static ProtobufC_RPC_Server * static ProtobufC_RPC_Server *
server_new_from_fd (ProtobufC_FD listening_fd, server_new_from_fd (ProtobufC_FD listening_fd,
ProtobufC_RPC_AddressType address_type,
const char *bind_name, const char *bind_name,
ProtobufCService *service, ProtobufCService *service,
ProtobufCDispatch *orig_dispatch) ProtobufCDispatch *orig_dispatch)
...@@ -1182,6 +1186,7 @@ server_new_from_fd (ProtobufC_FD listening_fd, ...@@ -1182,6 +1186,7 @@ server_new_from_fd (ProtobufC_FD listening_fd,
server->underlying = service; server->underlying = service;
server->first_connection = server->last_connection = NULL; server->first_connection = server->last_connection = NULL;
server->max_pending_requests_per_connection = 32; server->max_pending_requests_per_connection = 32;
server->address_type = address_type;
server->bind_name = allocator->alloc (allocator, strlen (bind_name) + 1); server->bind_name = allocator->alloc (allocator, strlen (bind_name) + 1);
server->error_handler = error_handler; server->error_handler = error_handler;
server->error_handler_data = "protobuf-c rpc server"; server->error_handler_data = "protobuf-c rpc server";
...@@ -1307,7 +1312,7 @@ protobuf_c_rpc_server_new (ProtobufC_RPC_AddressType type, ...@@ -1307,7 +1312,7 @@ protobuf_c_rpc_server_new (ProtobufC_RPC_AddressType type,
strerror (errno)); strerror (errno));
return NULL; return NULL;
} }
return server_new_from_fd (fd, name, service, dispatch); return server_new_from_fd (fd, type, name, service, dispatch);
} }
ProtobufCService * ProtobufCService *
...@@ -1317,16 +1322,24 @@ protobuf_c_rpc_server_destroy (ProtobufC_RPC_Server *server, ...@@ -1317,16 +1322,24 @@ protobuf_c_rpc_server_destroy (ProtobufC_RPC_Server *server,
ProtobufCService *rv = destroy_underlying ? NULL : server->underlying; ProtobufCService *rv = destroy_underlying ? NULL : server->underlying;
while (server->first_connection != NULL) while (server->first_connection != NULL)
server_connection_close (server->first_connection); server_connection_close (server->first_connection);
if (server->address_type == PROTOBUF_C_RPC_ADDRESS_LOCAL)
unlink (server->bind_name);
server->allocator->free (server->allocator, server->bind_name); server->allocator->free (server->allocator, server->bind_name);
while (server->recycled_requests != NULL) while (server->recycled_requests != NULL)
{ {
ServerRequest *req = server->recycled_requests; ServerRequest *req = server->recycled_requests;
server->recycled_requests = req->info.recycled.next; server->recycled_requests = req->info.recycled.next;
server->allocator->free (server->allocator, req); server->allocator->free (server->allocator, req);
} }
protobuf_c_dispatch_close_fd (server->dispatch, server->listening_fd); protobuf_c_dispatch_close_fd (server->dispatch, server->listening_fd);
if (destroy_underlying) if (destroy_underlying)
protobuf_c_service_destroy (server->underlying); protobuf_c_service_destroy (server->underlying);
server->allocator->free (server->allocator, server); server->allocator->free (server->allocator, server);
return rv; return rv;
} }
...@@ -40,6 +40,7 @@ typedef void (*ProtobufC_RPC_Error_Func) (ProtobufC_RPC_Error_Code code, ...@@ -40,6 +40,7 @@ typedef void (*ProtobufC_RPC_Error_Func) (ProtobufC_RPC_Error_Code code,
void *error_func_data); void *error_func_data);
/* --- Client API --- */ /* --- Client API --- */
typedef struct _ProtobufC_RPC_Client ProtobufC_RPC_Client;
/* The return value (the service) may be cast to ProtobufC_RPC_Client* */ /* The return value (the service) may be cast to ProtobufC_RPC_Client* */
ProtobufCService *protobuf_c_rpc_client_new (ProtobufC_RPC_AddressType type, ProtobufCService *protobuf_c_rpc_client_new (ProtobufC_RPC_AddressType type,
...@@ -59,7 +60,6 @@ ProtobufC_RPC_Client_ConnectStatus ...@@ -59,7 +60,6 @@ ProtobufC_RPC_Client_ConnectStatus
protobuf_c_rpc_client_connect (ProtobufC_RPC_Client *client); protobuf_c_rpc_client_connect (ProtobufC_RPC_Client *client);
/* --- configuring the client */ /* --- configuring the client */
typedef struct _ProtobufC_RPC_Client ProtobufC_RPC_Client;
/* Pluginable async dns hooks */ /* Pluginable async dns hooks */
......
...@@ -260,8 +260,6 @@ int main() ...@@ -260,8 +260,6 @@ int main()
protobuf_c_dispatch_destroy_default (); protobuf_c_dispatch_destroy_default ();
unlink ("test.socket");
return 0; return 0;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment