ldap/servers/plugins/dna/dna.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
New commits:
commit 9cf2aa34cf74cfa8f8d161743916615bd8ffccc6
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Apr 28 11:02:14 2014 -0400
Ticket 477779 - Need to lock server list when removing list
Description: Need to hold the write lock when deleting the server list.
There is no need to lock the list in the close function,
as all active threads should be stopped. In 1.3.3, the
dynamic plugin feature will also safely handle the plugin
shutdown.
https://fedorahosted.org/389/ticket/47779
Reviewed by: tbordaz(Thanks!)
(cherry picked from commit 2b98dcaf83fba3ea4fc52c2b8cad6deea02cb0e5)
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index f8f2813..490f32b 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -725,11 +725,9 @@ dna_load_shared_servers()
struct dnaServer *server = NULL, *global_servers = NULL;
PRCList *server_list = NULL;
PRCList *config_list = NULL;
+ int freed_servers = 0;
int ret = 0;
- /* First free the existing list. */
- dna_delete_global_servers();
-
/* Now build the new list. */
dna_write_lock();
if (!PR_CLIST_IS_EMPTY(dna_global_config)) {
@@ -747,6 +745,10 @@ dna_load_shared_servers()
}
dna_server_write_lock();
+ if(!freed_servers){
+ dna_delete_global_servers();
+ freed_servers = 1;
+ }
if (shared_list) {
server_list = PR_LIST_HEAD(shared_list);
while (server_list != shared_list) {