Gitweb:
http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=...
Commit: eed4792bfd833ae85e7388c9cbd2221daae3d9fa
Parent: 85abc322eb508542bf2548f5fd4313ad456d9ff2
Author: Yevheniy Demchenko <zheka(a)uvt.cz>
AuthorDate: Wed Jul 6 13:38:09 2011 -0400
Committer: Lon Hohberger <lhh(a)redhat.com>
CommitterDate: Fri Jul 8 12:16:21 2011 -0400
rgmanager: Fix segfault on config reload
This issue was initially triggered by rpm package which wrongly
set executable flag on resource-script.metadata file in
/usr/share/cluster/. After running "cman_tool version -r" cluster
crashed, last log entry was:
rgmanager[47960]: Loading Service Data
Further investigation has shown, that this behaviour is triggered
always if any runnable file in /usr/share/cluster provides output
which is not well formed XML when run with the meta-data operation.
This behaviour is probably caused by the wrong usage of
xmlInitParser()/XmlCleanUp() parser.
Resolves: rhbz#692895
Signed-off-by: Yevheniy Demchenko <zheka(a)uvt.cz>
Reviewed-by: Lon Hohberger <lhh(a)redhat.com>
Tested-by: Lon Hohberger <lhh(a)redhat.com>
---
rgmanager/src/daemons/main.c | 2 ++
rgmanager/src/daemons/resrules.c | 2 --
rgmanager/src/daemons/rg_locks.c | 2 --
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/rgmanager/src/daemons/main.c b/rgmanager/src/daemons/main.c
index 7ee8cf9..46ddf18 100644
--- a/rgmanager/src/daemons/main.c
+++ b/rgmanager/src/daemons/main.c
@@ -1038,6 +1038,7 @@ main(int argc, char **argv)
We know we're quorate. At this point, we need to
read the resource group trees from ccsd.
*/
+ xmlInitParser();
configure_rgmanager(-1, debug, &cluster_timeout);
logt_print(LOG_NOTICE, "Resource Group Manager Starting\n");
@@ -1118,6 +1119,7 @@ main(int argc, char **argv)
if (rg_initialized())
cleanup(cluster_ctx);
rv = 0;
+ xmlCleanupParser();
out_ls:
clu_lock_finished(rgmanager_lsname);
diff --git a/rgmanager/src/daemons/resrules.c b/rgmanager/src/daemons/resrules.c
index fac48d9..cc59e30 100644
--- a/rgmanager/src/daemons/resrules.c
+++ b/rgmanager/src/daemons/resrules.c
@@ -1135,7 +1135,6 @@ load_resource_rules(const char *rpath, resource_rule_t **rules)
if (!dir)
return -1;
- xmlInitParser();
while ((de = readdir(dir))) {
fn = basename(de->d_name);
@@ -1173,7 +1172,6 @@ load_resource_rules(const char *rpath, resource_rule_t **rules)
load_resource_rulefile(path, rules);
}
}
- xmlCleanupParser();
closedir(dir);
diff --git a/rgmanager/src/daemons/rg_locks.c b/rgmanager/src/daemons/rg_locks.c
index f2d1050..14bd241 100644
--- a/rgmanager/src/daemons/rg_locks.c
+++ b/rgmanager/src/daemons/rg_locks.c
@@ -115,9 +115,7 @@ ccs_lock(void)
#else /* No ccs support */
{
pthread_mutex_lock(&_ccs_mutex);
- xmlInitParser();
ccs_doc = xmlParseFile(conffile);
- xmlCleanupParser();
if (!ccs_doc)
return -1;
return 0;