ldap/servers/slapd/connection.c | 1 +
ldap/servers/slapd/daemon.c | 7 +++++++
ldap/servers/slapd/proto-slap.h | 1 +
3 files changed, 9 insertions(+)
New commits:
commit df93b03da12c22d18a4153105f687671e52efdd5
Author: Matthew Via <​matthew.via(a)mailtrust.com>
Date: Wed Jul 10 11:30:57 2013 -0600
Ticket #47428 - Memory leak in 389-ds-base 1.2.11.15
https://fedorahosted.org/389/ticket/47428
Reviewed by: rmeggins
Branch: master
Fix Description: Call ber_sockbuf_remove_io to remove our openldap io layer
from the connection c_sb and free the data associated with it.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c
index 687bf42..b2ed83c 100644
--- a/ldap/servers/slapd/connection.c
+++ b/ldap/servers/slapd/connection.c
@@ -263,6 +263,7 @@ connection_cleanup(Connection *conn)
/* destroy any sasl context */
sasl_dispose((sasl_conn_t**)&conn->c_sasl_conn);
/* PAGED_RESULTS */
+ handle_closed_connection(conn); /* Clean up sockbufs */
pagedresults_cleanup(conn, 0 /* do not need to lock inside */);
/* free the connection socket buffer */
diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c
index e0c14c8..817fea7 100644
--- a/ldap/servers/slapd/daemon.c
+++ b/ldap/servers/slapd/daemon.c
@@ -2593,6 +2593,13 @@ bail:
#endif /* ENABLE_AUTOBIND */
#endif /* ENABLE_LDAPI */
+void
+handle_closed_connection(Connection *conn)
+{
+ ber_sockbuf_remove_io(conn->c_sb, &openldap_sockbuf_io,
+ LBER_SBIOD_LEVEL_PROVIDER);
+}
+
/* NOTE: this routine is not reentrant */
static int
handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc *pr_acceptfd, int
secure, int local)
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index dc73faa..447d7d5 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -1413,6 +1413,7 @@ int sasl_io_setup(Connection *c);
/*
* daemon.c
*/
+void handle_closed_connection(Connection *);
#ifndef LINUX
void slapd_do_nothing(int);
#endif