public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
From: zkabelac@sourceware.org
To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org
Subject: LVM2 ./WHATS_NEW tools/polldaemon.c
Date: Tue, 28 Feb 2012 10:06:00 -0000	[thread overview]
Message-ID: <20120228100654.14318.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	zkabelac@sourceware.org	2012-02-28 10:06:54

Modified files:
	.              : WHATS_NEW 
	tools          : polldaemon.c 

Log message:
	Duplicate standard in/out descriptors for daemon
	
	Addressing somewhat tricky bug here.
	Since stdin,stdout,stderr were closed it's been occasionally possible to
	see some unexpected messages to be flowing into a clvmd and generating some
	randomly sized allocation of many megabytes. Since the message was not
	being generated by standard send_message() construction, after some more
	testing it apperead to be a debug log message - thus something has flown
	to local socket opened on strandard out descriptor.
	
	To fix the issue - use standard file descriptor duplication code for daemons.
	
	For making easier debugging of polling daemon - developer might want to recompile
	without modifition of standard file descriptors.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.2320&r2=1.2321
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/polldaemon.c.diff?cvsroot=lvm2&r1=1.46&r2=1.47

--- LVM2/WHATS_NEW	2012/02/28 09:58:19	1.2320
+++ LVM2/WHATS_NEW	2012/02/28 10:06:53	1.2321
@@ -1,5 +1,6 @@
 Version 2.02.94 - 
 ====================================
+  For polling daemon reopen stdin,stdout,stderr to /dev/null.
   Limit the max size of processed clvmd message to ~8KB.
   Do not send uninitilised bytes in cluster error reply messages.
   Use unsigned type for bitmask instead of enum type for lvm properties.
--- LVM2/tools/polldaemon.c	2011/09/06 18:49:32	1.46
+++ LVM2/tools/polldaemon.c	2012/02/28 10:06:54	1.47
@@ -32,6 +32,8 @@
  */
 static int _become_daemon(struct cmd_context *cmd)
 {
+	static const char devnull[] = "/dev/null";
+	int null_fd;
 	pid_t pid;
 	struct sigaction act = {
 		{_sigchld_handler},
@@ -57,12 +59,27 @@
 	if (setsid() == -1)
 		log_error("Background process failed to setsid: %s",
 			  strerror(errno));
-	init_verbose(VERBOSE_BASE_LEVEL);
 
-	close(STDIN_FILENO);
-	close(STDOUT_FILENO);
-	close(STDERR_FILENO);
+	/* For poll debugging it's best to disable for compilation */
+#if 1
+	if ((null_fd = open(devnull, O_RDWR)) == -1) {
+		log_sys_error("open", devnull);
+		_exit(ECMD_FAILED);
+	}
+
+	if (dup2(null_fd, STDIN_FILENO)  || /* reopen stdin */
+	    dup2(null_fd, STDOUT_FILENO) || /* reopen stdout */
+	    dup2(null_fd, STDERR_FILENO)) { /* reopen stderr */
+		log_sys_error("dup2", "redirect");
+		(void) close(null_fd);
+		_exit(ECMD_FAILED);
+	}
 
+	if (null_fd > STDERR_FILENO)
+		(void) close(null_fd);
+
+	init_verbose(VERBOSE_BASE_LEVEL);
+#endif
 	strncpy(*cmd->argv, "(lvm2)", strlen(*cmd->argv));
 
 	reset_locking();


             reply	other threads:[~2012-02-28 10:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-28 10:06 zkabelac [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-01-19 23:11 mbroz
2011-01-05 12:59 zkabelac
2010-08-26 16:29 jbrassow
2010-08-23 11:34 mbroz
2009-09-30 17:43 agk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120228100654.14318.qmail@sourceware.org \
    --to=zkabelac@sourceware.org \
    --cc=lvm-devel@redhat.com \
    --cc=lvm2-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).