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();
next 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: linkBe 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).