cluster: STABLE3 - notifyd: don't leak memory if we fail to fork cman_notify

Fabio M. Di Nitto fabbione@fedoraproject.org
Fri Mar 6 19:49:00 GMT 2009


Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=56c2ba92e4b488abbf6834702fa5f6d85d507c8c
Commit:        56c2ba92e4b488abbf6834702fa5f6d85d507c8c
Parent:        f252e8d5c06dbcf33214271540dcad47b4f7ffad
Author:        Fabio M. Di Nitto <fdinitto@redhat.com>
AuthorDate:    Fri Mar 6 20:48:11 2009 +0100
Committer:     Fabio M. Di Nitto <fdinitto@redhat.com>
CommitterDate: Fri Mar 6 20:48:11 2009 +0100

notifyd: don't leak memory if we fail to fork cman_notify

on error path we were not freeing envp strings.

Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
---
 cman/notifyd/main.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/cman/notifyd/main.c b/cman/notifyd/main.c
index e864690..bcacefa 100644
--- a/cman/notifyd/main.c
+++ b/cman/notifyd/main.c
@@ -210,6 +210,7 @@ static void dispatch_notification(char *str, int *quorum)
 	char scratch[PATH_MAX];
 	pid_t notify_pid;
 	int pidstatus;
+	int err = 0;
 
 	if (!str)
 		return;
@@ -236,13 +237,15 @@ static void dispatch_notification(char *str, int *quorum)
 	{
 		case -1:
 			/* unable to fork */
-			exit(EXIT_FAILURE);
+			err = 1;
+			goto out;
 			break;
 
 		case 0: /* child */
 			execve(SBINDIR "/cman_notify", argv, envp);
 			/* unable to execute cman_notify */
-			exit(EXIT_FAILURE);
+			err = 1;
+			goto out;
 			break;
 
 		default: /* parent */
@@ -250,12 +253,15 @@ static void dispatch_notification(char *str, int *quorum)
 			break;
 	}
 
+out:
 	while(envptr >= 0) {
 		if (envp[envptr])
 			free(envp[envptr]);
 
 		envptr--;
 	}
+	if (err)
+		exit(EXIT_FAILURE);
 }
 
 static void cman_callback(cman_handle_t ch, void *private, int reason, int arg)



More information about the Cluster-cvs mailing list