diff options
author | Andreas Schneider <asn@samba.org> | 2010-09-10 16:06:24 +0200 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2010-09-10 16:10:46 +0200 |
commit | fc1a5dbffb1330bba0e4deebdf18b812ccc1a823 (patch) | |
tree | cfb707a2eb7e8f2eaa2fa050d1d3c6c7735b7f9d | |
parent | ed2c06f9da0401fb95dcc16b4d3a3bd4f27b09f2 (diff) | |
download | samba-fc1a5dbffb1330bba0e4deebdf18b812ccc1a823.tar.gz samba-fc1a5dbffb1330bba0e4deebdf18b812ccc1a823.tar.bz2 samba-fc1a5dbffb1330bba0e4deebdf18b812ccc1a823.zip |
s3-spoolss: Don't leak memory on the session counter list.
Thanks Günther, please check.
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/rpc_server/srv_spoolss_nt.c | 12 | ||||
-rw-r--r-- | source3/smbd/server.c | 9 |
3 files changed, 21 insertions, 1 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 0b54932135..5e2e0bff3d 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -4386,6 +4386,7 @@ NTSTATUS np_read_recv(struct tevent_req *req, ssize_t *nread, bool *is_data_outstanding); /* The following definitions come from rpc_server/srv_spoolss_nt.c */ +void srv_spoolss_cleanup(void); void do_drv_upgrade_printer(struct messaging_context *msg, void *private_data, diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 573faaf979..b5e2ddbdc6 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -1462,6 +1462,18 @@ static bool srv_spoolss_drv_upgrade_printer(const char *drivername, return true; } +void srv_spoolss_cleanup(void) +{ + struct printer_session_counter *session_counter; + + for (session_counter = counter_list; + session_counter != NULL; + session_counter = counter_list) { + DLIST_REMOVE(counter_list, session_counter); + TALLOC_FREE(session_counter); + } +} + /********************************************************************** callback to receive a MSG_PRINTER_DRVUPGRADE message and interate over all printers, upgrading ones as necessary diff --git a/source3/smbd/server.c b/source3/smbd/server.c index c9ae742b99..247cbb84d5 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -807,6 +807,13 @@ static bool spoolss_init_cb(void *ptr) return nt_printing_tdb_migrate(msg_ctx); } +static bool spoolss_shutdown_cb(void *ptr) +{ + srv_spoolss_cleanup(); + + return true; +} + /**************************************************************************** main program. ****************************************************************************/ @@ -1165,7 +1172,7 @@ extern void build_options(bool screen); * can't register it twice. */ spoolss_cb.init = spoolss_init_cb; - spoolss_cb.shutdown = NULL; + spoolss_cb.shutdown = spoolss_shutdown_cb; spoolss_cb.private_data = smbd_server_conn->msg_ctx; /* Spoolss depends on a winreg pipe, so start it first. */ |