From ceb7331007e2ca931a564dae52c5b2f6795ea8e2 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Mar 14 2017 20:18:40 +0000 Subject: Issue 49170 - sync plugin thread count not handled correctly Bug Description: If sync repl connections get aborted the thread_count is not properly updated which leads to the server hanging on shutdown. Fix Description: When connections get aborted we still need to shutdown the result thread cleanly: remove the req, update thread count, etc. https://pagure.io/389-ds-base/issue/49170 Reviewed by: nhosoi(Thanks!) (cherry picked from commit 770fcf4349ccf9e07ff0e1cf0d6991927ec9ba75) (cherry picked from commit d0d8e6e38e86b0adf3f1c48179bca9cdc7a95981) --- diff --git a/ldap/servers/plugins/sync/sync_persist.c b/ldap/servers/plugins/sync/sync_persist.c index e3335c7..df59ba9 100644 --- a/ldap/servers/plugins/sync/sync_persist.c +++ b/ldap/servers/plugins/sync/sync_persist.c @@ -549,14 +549,14 @@ sync_send_results( void *arg ) slapi_log_error(SLAPI_LOG_FATAL, "Content Synchronization Search", "conn=%" NSPRIu64 " op=%d Null connection - aborted\n", connid, opid); - return; + goto done; } conn_acq_flag = sync_acquire_connection (conn); if (conn_acq_flag) { slapi_log_error(SLAPI_LOG_FATAL, "Content Synchronization Search", "conn=%" NSPRIu64 " op=%d Could not acquire the connection - aborted\n", connid, opid); - return; + goto done; } PR_Lock( sync_request_list->sync_req_cvarlock ); @@ -657,15 +657,14 @@ sync_send_results( void *arg ) } } PR_Unlock( sync_request_list->sync_req_cvarlock ); - sync_remove_request( req ); /* indicate the end of search */ - sync_release_connection(req->req_pblock, conn, op, conn_acq_flag == 0); +done: + sync_remove_request( req ); PR_DestroyLock ( req->req_lock ); req->req_lock = NULL; - slapi_ch_free((void **) &req->req_pblock ); slapi_ch_free((void **) &req->req_orig_base ); slapi_filter_free(req->req_filter, 1);