51 lines
1.9 KiB
Diff
51 lines
1.9 KiB
Diff
From b8cac173ca2549d2142332107e06fcb4bd34bd65 Mon Sep 17 00:00:00 2001
|
|
From: James Chapman <jachapma@redhat.com>
|
|
Date: Fri, 8 Mar 2024 16:15:52 +0000
|
|
Subject: [PATCH] Issue 6119 - Synchronise accept_thread with slapd_daemon
|
|
(#6120)
|
|
|
|
Bug Description: A corner cases exists, where the slapd_daemon has
|
|
begun its shutdown process but the accept_thread is still running
|
|
and capable of handling new connections. When this scenario occurs,
|
|
the connection subsystem has been partially deallocated and is in
|
|
an unstable state. A segfault is generated when attempting to get a
|
|
new connection from the connection table.
|
|
|
|
Fix Description: The connection table is only deallocated when the
|
|
number of active threads is 0. Modify the accept_thread to adjust the
|
|
the active thread count during creation/destruction, meaning the connection
|
|
table can only be freed when the accept_thread has completed
|
|
|
|
Relates: https://github.com/389ds/389-ds-base/issues/6119
|
|
|
|
Reviewed by: @tbordaz, @Firstyear , @mreynolds389 (Thank you)
|
|
---
|
|
ldap/servers/slapd/daemon.c | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c
|
|
index 5d01a2526..a43fc9285 100644
|
|
--- a/ldap/servers/slapd/daemon.c
|
|
+++ b/ldap/servers/slapd/daemon.c
|
|
@@ -868,6 +868,8 @@ accept_thread(void *vports)
|
|
slapi_ch_free((void **)&listener_idxs);
|
|
slapd_sockets_ports_free(ports);
|
|
slapi_ch_free((void **)&fds);
|
|
+ g_decr_active_threadcnt();
|
|
+ slapi_log_err(SLAPI_LOG_INFO, "slapd_daemon", "slapd shutting down - accept_thread\n");
|
|
}
|
|
|
|
void
|
|
@@ -1158,6 +1160,8 @@ slapd_daemon(daemon_ports_t *ports)
|
|
slapi_log_err(SLAPI_LOG_EMERG, "slapd_daemon", "Unable to fd accept thread - Shutting Down (" SLAPI_COMPONENT_NAME_NSPR " error %d - %s)\n",
|
|
errorCode, slapd_pr_strerror(errorCode));
|
|
g_set_shutdown(SLAPI_SHUTDOWN_EXIT);
|
|
+ } else{
|
|
+ g_incr_active_threadcnt();
|
|
}
|
|
|
|
#ifdef WITH_SYSTEMD
|
|
--
|
|
2.49.0
|
|
|