FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Cluster Development

 
 
LinkBack Thread Tools
 
Old 09-22-2011, 08:43 AM
"Fabio M. Di Nitto"
 
Default cman: allow late close of stderr file descriptor and free resources

In case debug is enabled, and cman is executed via init script, we leak
a fd associated to a file that will grow indefinetely in size.

We address this situation by adding a very specific cman_tool startup
option associated to init script, to tell cman to perform a late
close of stderr and freeing correctly all resources.

Resolves: rhbz#740385

Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
---
cman/cman_tool/cman_tool.h | 1 +
cman/cman_tool/join.c | 4 ++++
cman/cman_tool/main.c | 7 ++++++-
cman/daemon/ais.c | 11 +++++++++++
cman/init.d/cman.in | 2 +-
5 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/cman/cman_tool/cman_tool.h b/cman/cman_tool/cman_tool.h
index e84b491..e1250ee 100644
--- a/cman/cman_tool/cman_tool.h
+++ b/cman/cman_tool/cman_tool.h
@@ -84,6 +84,7 @@ struct commandline
int remove;
int force;
int verbose;
+ int nostderr_debug;
int nodeid;
int timeout;
unsigned int config_version;
diff --git a/cman/cman_tool/join.c b/cman/cman_tool/join.c
index caa5bf6..a33c8b4 100644
--- a/cman/cman_tool/join.c
+++ b/cman/cman_tool/join.c
@@ -186,6 +186,10 @@ int join(commandline_t *comline, char *main_envp[])
snprintf(scratch, sizeof(scratch), "CMAN_DEBUG=%d", comline->verbose);
envp[envptr++] = strdup(scratch);
}
+ if (comline->nostderr_debug) {
+ snprintf(scratch, sizeof(scratch), "CMAN_NOSTDERR_DEBUG=true");
+ envp[envptr++] = strdup(scratch);
+ }
if (comline->noconfig_opt) {
envp[envptr++] = strdup("CMAN_NOCONFIG=true");
snprintf(config_modules, sizeof(config_modules), "cmanpreconfig%s",
diff --git a/cman/cman_tool/main.c b/cman/cman_tool/main.c
index 61d29aa..88612c4 100644
--- a/cman/cman_tool/main.c
+++ b/cman/cman_tool/main.c
@@ -12,7 +12,7 @@

#define DEFAULT_CONFIG_MODULE "xmlconfig"

-#define OPTION_STRING ("m:n:v:e:2p:c:i:N:t:k:F:C:VAPwfqah?XD::Sd::r::" )
+#define OPTION_STRING ("m:n:v:e:2p:c:i:N:t:k:F:C:VAPwfqazh?XD::Sd::r:: ")
#define OP_JOIN 1
#define OP_LEAVE 2
#define OP_EXPECTED 3
@@ -62,6 +62,7 @@ static void print_usage(int subcmd)
printf(" -D<fail|warn|none> What to do about the config. Default (without -D) is to
");
printf(" validate the config. with -D no validation will be done.
");
printf(" -Dwarn will print errors but allow the operation to continue.
");
+ printf(" -z Disable stderr debugging output.
");
printf("
");
}

@@ -1047,6 +1048,10 @@ static void decode_arguments(int argc, char *argv[], commandline_t *comline)
comline->verbose = 255;
break;

+ case 'z':
+ comline->nostderr_debug = 1;
+ break;
+
case 'w':
comline->wait_opt = TRUE;
break;
diff --git a/cman/daemon/ais.c b/cman/daemon/ais.c
index 05cb8d7..6b5640a 100644
--- a/cman/daemon/ais.c
+++ b/cman/daemon/ais.c
@@ -14,6 +14,8 @@
#include <arpa/inet.h>
#include <netdb.h>
#include <inttypes.h>
+#include <sys/stat.h>
+#include <fcntl.h>

/* corosync headers */
#include <corosync/corotypes.h>
@@ -220,6 +222,15 @@ static int cman_exec_init_fn(struct corosync_api_v1 *api)
api->tpg_init(&group_handle, cman_deliver_fn, cman_confchg_fn);
api->tpg_join(group_handle, cman_group, 1);

+ if (getenv("CMAN_NOSTDERR_DEBUG")) {
+ int tmpfd;
+ tmpfd = open("/dev/null", O_RDWR);
+ if (tmpfd > -1 && tmpfd != STDERR_FILENO) {
+ dup2(tmpfd, STDERR_FILENO);
+ close(tmpfd);
+ }
+ }
+
return 0;
}

diff --git a/cman/init.d/cman.in b/cman/init.d/cman.in
index fecefea..d0c6f70 100644
--- a/cman/init.d/cman.in
+++ b/cman/init.d/cman.in
@@ -556,7 +556,7 @@ start_cman()
return 1
fi

- cman_tool -t $CMAN_CLUSTER_TIMEOUT -w join $cman_join_opts > $tmpfile 2>&1 &
+ cman_tool -z -t $CMAN_CLUSTER_TIMEOUT -w join $cman_join_opts > $tmpfile 2>&1 &

while status cman_tool >/dev/null 2>&1; do
sleep 0.2
--
1.7.4.4
 

Thread Tools




All times are GMT. The time now is 10:16 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org