|
|
61f723 |
From a00917eec0bcef75180eaf4dd9b360519b9e2644 Mon Sep 17 00:00:00 2001
|
|
|
61f723 |
From: Mark Reynolds <mreynolds@redhat.com>
|
|
|
61f723 |
Date: Tue, 14 Mar 2017 14:35:05 -0400
|
|
|
61f723 |
Subject: [PATCH 2/5] Issue 49170 - sync plugin thread count not handled
|
|
|
61f723 |
correctly
|
|
|
61f723 |
|
|
|
61f723 |
Bug Description: If sync repl connections get aborted the thread_count is
|
|
|
61f723 |
not properly updated which leads to the server hanging
|
|
|
61f723 |
on shutdown.
|
|
|
61f723 |
|
|
|
61f723 |
Fix Description: When connections get aborted we still need to shutdown
|
|
|
61f723 |
the result thread cleanly: remove the req, update thread
|
|
|
61f723 |
count, etc.
|
|
|
61f723 |
|
|
|
61f723 |
https://pagure.io/389-ds-base/issue/49170
|
|
|
61f723 |
|
|
|
61f723 |
Reviewed by: nhosoi(Thanks!)
|
|
|
61f723 |
|
|
|
61f723 |
(cherry picked from commit 770fcf4349ccf9e07ff0e1cf0d6991927ec9ba75)
|
|
|
61f723 |
---
|
|
|
61f723 |
ldap/servers/plugins/sync/sync_persist.c | 17 ++++++++---------
|
|
|
61f723 |
1 file changed, 8 insertions(+), 9 deletions(-)
|
|
|
61f723 |
|
|
|
61f723 |
diff --git a/ldap/servers/plugins/sync/sync_persist.c b/ldap/servers/plugins/sync/sync_persist.c
|
|
|
61f723 |
index d0c8da2..667a529 100644
|
|
|
61f723 |
--- a/ldap/servers/plugins/sync/sync_persist.c
|
|
|
61f723 |
+++ b/ldap/servers/plugins/sync/sync_persist.c
|
|
|
61f723 |
@@ -548,16 +548,16 @@ sync_send_results( void *arg )
|
|
|
61f723 |
slapi_pblock_get(req->req_pblock, SLAPI_CONNECTION, &conn;;
|
|
|
61f723 |
if (NULL == conn) {
|
|
|
61f723 |
slapi_log_err(SLAPI_LOG_ERR, SYNC_PLUGIN_SUBSYSTEM,
|
|
|
61f723 |
- "sync_send_results - conn=%" NSPRIu64 " op=%d Null connection - aborted\n",
|
|
|
61f723 |
- connid, opid);
|
|
|
61f723 |
- return;
|
|
|
61f723 |
+ "sync_send_results - conn=%" NSPRIu64 " op=%d Null connection - aborted\n",
|
|
|
61f723 |
+ connid, opid);
|
|
|
61f723 |
+ goto done;
|
|
|
61f723 |
}
|
|
|
61f723 |
conn_acq_flag = sync_acquire_connection (conn);
|
|
|
61f723 |
if (conn_acq_flag) {
|
|
|
61f723 |
slapi_log_err(SLAPI_LOG_ERR, SYNC_PLUGIN_SUBSYSTEM,
|
|
|
61f723 |
- "sync_send_results - conn=%" NSPRIu64 " op=%d Could not acquire the connection - aborted\n",
|
|
|
61f723 |
- connid, opid);
|
|
|
61f723 |
- return;
|
|
|
61f723 |
+ "sync_send_results - conn=%" NSPRIu64 " op=%d Could not acquire the connection - aborted\n",
|
|
|
61f723 |
+ connid, opid);
|
|
|
61f723 |
+ goto done;
|
|
|
61f723 |
}
|
|
|
61f723 |
|
|
|
61f723 |
PR_Lock( sync_request_list->sync_req_cvarlock );
|
|
|
61f723 |
@@ -658,15 +658,14 @@ sync_send_results( void *arg )
|
|
|
61f723 |
}
|
|
|
61f723 |
}
|
|
|
61f723 |
PR_Unlock( sync_request_list->sync_req_cvarlock );
|
|
|
61f723 |
- sync_remove_request( req );
|
|
|
61f723 |
|
|
|
61f723 |
/* indicate the end of search */
|
|
|
61f723 |
-
|
|
|
61f723 |
sync_release_connection(req->req_pblock, conn, op, conn_acq_flag == 0);
|
|
|
61f723 |
|
|
|
61f723 |
+done:
|
|
|
61f723 |
+ sync_remove_request( req );
|
|
|
61f723 |
PR_DestroyLock ( req->req_lock );
|
|
|
61f723 |
req->req_lock = NULL;
|
|
|
61f723 |
-
|
|
|
61f723 |
slapi_ch_free((void **) &req->req_pblock );
|
|
|
61f723 |
slapi_ch_free((void **) &req->req_orig_base );
|
|
|
61f723 |
slapi_filter_free(req->req_filter, 1);
|
|
|
61f723 |
--
|
|
|
61f723 |
2.9.3
|
|
|
61f723 |
|