ldap/servers/plugins/dna/dna.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
New commits:
commit f94bfa1917c95f2e93e43fb78c57a6cea96df69c
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 5ef5713..6e0c481 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) {