diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-26 03:05:04 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:16 -0500 |
commit | 764eddb69647681f784f343a122251ca1ecf62df (patch) | |
tree | 1d64246d07b4f040c4e36367e4172135c8af5011 /source4/smbd | |
parent | 4b1050a6cf3e6d9f7a8e75dd90ed1ccd52f29abb (diff) | |
download | samba-764eddb69647681f784f343a122251ca1ecf62df.tar.gz samba-764eddb69647681f784f343a122251ca1ecf62df.tar.bz2 samba-764eddb69647681f784f343a122251ca1ecf62df.zip |
r2646: - use a talloc destructor to ensure that sockets from the new socket
library are closed on abnormal termination
- convert the service.h structures to the new talloc methods
(This used to be commit 2dc334a3284858eb1c7190f9687c9b6c879ecc9d)
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/process_single.c | 2 | ||||
-rw-r--r-- | source4/smbd/process_standard.c | 2 | ||||
-rw-r--r-- | source4/smbd/process_thread.c | 2 | ||||
-rw-r--r-- | source4/smbd/server.h | 1 | ||||
-rw-r--r-- | source4/smbd/service.c | 24 | ||||
-rw-r--r-- | source4/smbd/service.h | 3 |
6 files changed, 11 insertions, 23 deletions
diff --git a/source4/smbd/process_single.c b/source4/smbd/process_single.c index 4c0dcd4e35..62d780277c 100644 --- a/source4/smbd/process_single.c +++ b/source4/smbd/process_single.c @@ -55,6 +55,8 @@ static void single_accept_connection(struct event_context *ev, struct fd_event * return; } + talloc_steal(conn, sock); + DLIST_ADD(server_socket->connection_list,conn); /* return to event handling */ diff --git a/source4/smbd/process_standard.c b/source4/smbd/process_standard.c index 22e47d1b1f..1bb30c2ef0 100644 --- a/source4/smbd/process_standard.c +++ b/source4/smbd/process_standard.c @@ -80,6 +80,8 @@ static void standard_accept_connection(struct event_context *ev, struct fd_event return; } + talloc_steal(conn, sock); + DLIST_ADD(server_socket->connection_list,conn); /* return to the event loop */ diff --git a/source4/smbd/process_thread.c b/source4/smbd/process_thread.c index ef4d53e188..4e11137f37 100644 --- a/source4/smbd/process_thread.c +++ b/source4/smbd/process_thread.c @@ -87,6 +87,8 @@ static void thread_accept_connection(struct event_context *ev, struct fd_event * return; } + talloc_steal(conn, sock); + /* TODO: is this MUTEX_LOCK in the right place here? * --metze */ diff --git a/source4/smbd/server.h b/source4/smbd/server.h index e8c32d01fa..e76adec44d 100644 --- a/source4/smbd/server.h +++ b/source4/smbd/server.h @@ -25,7 +25,6 @@ struct server_service; struct event_context; struct server_context { - TALLOC_CTX *mem_ctx; struct server_service *service_list; struct event_context *events; }; diff --git a/source4/smbd/service.c b/source4/smbd/service.c index 0733e6fc0f..e3eb4a02c1 100644 --- a/source4/smbd/service.c +++ b/source4/smbd/service.c @@ -27,7 +27,6 @@ struct server_context *server_service_startup(const char *model) { int i; const char **server_services = lp_server_services(); - TALLOC_CTX *mem_ctx; struct server_context *srv_ctx; const struct model_ops *model_ops; @@ -42,20 +41,12 @@ struct server_context *server_service_startup(const char *model) return NULL; } - mem_ctx = talloc_init("server_context"); - if (!mem_ctx) { - DEBUG(0,("talloc_init(server_context) failed\n")); - return NULL; - } - - srv_ctx = talloc_p(mem_ctx, struct server_context); + srv_ctx = talloc_p(NULL, struct server_context); if (!srv_ctx) { - DEBUG(0,("talloc_p(mem_ctx, struct server_context) failed\n")); return NULL; } ZERO_STRUCTP(srv_ctx); - srv_ctx->mem_ctx = mem_ctx; srv_ctx->events = event_context_init(); if (!srv_ctx->events) { @@ -65,7 +56,6 @@ struct server_context *server_service_startup(const char *model) for (i=0;server_services[i];i++) { - TALLOC_CTX *mem_ctx2; const struct server_service_ops *service_ops; struct server_service *service; @@ -75,16 +65,12 @@ struct server_context *server_service_startup(const char *model) return NULL; } - mem_ctx2 = talloc_init("server_service"); - - service = talloc_p(mem_ctx2, struct server_service); + service = talloc_p(srv_ctx, struct server_service); if (!service) { - DEBUG(0,("talloc_p(mem_ctx, struct server_service) failed\n")); return NULL; } ZERO_STRUCTP(service); - service->mem_ctx = mem_ctx2; service->ops = service_ops; service->model_ops = model_ops; service->srv_ctx = srv_ctx; @@ -129,6 +115,8 @@ struct server_socket *service_setup_socket(struct server_service *service, return NULL; } + talloc_steal(service, socket_ctx); + /* ready to listen */ status = socket_set_option(socket_ctx, "SO_KEEPALIVE SO_REUSEADDR=1", NULL); if (!NT_STATUS_IS_OK(status)) { @@ -169,7 +157,6 @@ struct server_socket *service_setup_socket(struct server_service *service, fde.handler = model_ops->accept_connection; ZERO_STRUCTP(srv_sock); - srv_sock->mem_ctx = srv_sock; srv_sock->service = service; srv_sock->socket = socket_ctx; srv_sock->event.ctx = service->srv_ctx->events; @@ -201,7 +188,6 @@ struct server_connection *server_setup_connection(struct event_context *ev, } ZERO_STRUCTP(srv_conn); - srv_conn->mem_ctx = srv_conn; fde.private = srv_conn; fde.fd = socket_get_fd(sock); @@ -255,7 +241,7 @@ void server_destroy_connection(struct server_connection *srv_conn) event_remove_timed(srv_conn->event.ctx, srv_conn->event.idle); srv_conn->event.idle = NULL; - talloc_destroy(srv_conn->mem_ctx); + talloc_free(srv_conn); } void server_io_handler(struct event_context *ev, struct fd_event *fde, time_t t, uint16_t flags) diff --git a/source4/smbd/service.h b/source4/smbd/service.h index 5d72d388fd..88618964ce 100644 --- a/source4/smbd/service.h +++ b/source4/smbd/service.h @@ -67,7 +67,6 @@ struct socket_context; struct server_socket { struct server_socket *next,*prev; - TALLOC_CTX *mem_ctx; void *private_data; struct { @@ -84,7 +83,6 @@ struct server_socket { struct server_service { struct server_service *next,*prev; - TALLOC_CTX *mem_ctx; void *private_data; const struct server_service_ops *ops; @@ -97,7 +95,6 @@ struct server_service { struct server_connection { struct server_connection *next,*prev; - TALLOC_CTX *mem_ctx; void *private_data; struct { |