mirror of
https://git.centos.org/rpms/389-ds-base.git
synced 2025-02-24 08:42:57 +00:00
73 lines
2.4 KiB
Diff
73 lines
2.4 KiB
Diff
From 5bed4704f3fa6fc6fca1cad9f132985cc7f68056 Mon Sep 17 00:00:00 2001
|
|
From: Mark Reynolds <mreynolds@redhat.com>
|
|
Date: Tue, 14 May 2019 13:58:42 -0400
|
|
Subject: [PATCH] Ticket 50370 - CleanAllRUV task crashing during server
|
|
shutdown
|
|
|
|
Description: There is a race condition during server shutdown that
|
|
can cause the server to crash. Increment the active
|
|
thread count for each cleaning task to prevent the plugins
|
|
from being closed before the thread terminates.
|
|
|
|
https://pagure.io/389-ds-base/issue/50370
|
|
|
|
Reviewed by: firstyear(Thanks!)
|
|
|
|
(cherry picked from commit 7141b8d10382e8dcb8528b57e5226c82506b79b9)
|
|
---
|
|
.../plugins/replication/repl5_replica_config.c | 14 ++++++++++++--
|
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/ldap/servers/plugins/replication/repl5_replica_config.c b/ldap/servers/plugins/replication/repl5_replica_config.c
|
|
index a952b687d..b4aff9eb4 100644
|
|
--- a/ldap/servers/plugins/replication/repl5_replica_config.c
|
|
+++ b/ldap/servers/plugins/replication/repl5_replica_config.c
|
|
@@ -1630,9 +1630,13 @@ replica_cleanallruv_thread(void *arg)
|
|
int aborted = 0;
|
|
int rc = 0;
|
|
|
|
- if (!data) {
|
|
+ if (!data || slapi_is_shutting_down()) {
|
|
return; /* no data */
|
|
}
|
|
+
|
|
+ /* Increase active thread count to prevent a race condition at server shutdown */
|
|
+ g_incr_active_threadcnt();
|
|
+
|
|
if (data->task) {
|
|
slapi_task_inc_refcount(data->task);
|
|
slapi_log_err(SLAPI_LOG_PLUGIN, repl_plugin_name,
|
|
@@ -1912,6 +1916,7 @@ done:
|
|
slapi_ch_free_string(&data->force);
|
|
slapi_ch_free_string(&rid_text);
|
|
slapi_ch_free((void **)&data);
|
|
+ g_decr_active_threadcnt();
|
|
}
|
|
|
|
/*
|
|
@@ -3005,9 +3010,13 @@ replica_abort_task_thread(void *arg)
|
|
int release_it = 0;
|
|
int count = 0, rc = 0;
|
|
|
|
- if (!data) {
|
|
+ if (!data || slapi_is_shutting_down()) {
|
|
return; /* no data */
|
|
}
|
|
+
|
|
+ /* Increase active thread count to prevent a race condition at server shutdown */
|
|
+ g_incr_active_threadcnt();
|
|
+
|
|
if (data->task) {
|
|
slapi_task_inc_refcount(data->task);
|
|
slapi_log_err(SLAPI_LOG_PLUGIN, repl_plugin_name, "replica_abort_task_thread --> refcount incremented.\n");
|
|
@@ -3134,6 +3143,7 @@ done:
|
|
slapi_ch_free_string(&data->certify);
|
|
slapi_sdn_free(&data->sdn);
|
|
slapi_ch_free((void **)&data);
|
|
+ g_decr_active_threadcnt();
|
|
}
|
|
|
|
static int
|
|
--
|
|
2.17.2
|
|
|