From owner-freebsd-fs@FreeBSD.ORG Sun Oct 3 12:45:48 2010 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0CAA3106566B; Sun, 3 Oct 2010 12:45:48 +0000 (UTC) (envelope-from to.my.trociny@gmail.com) Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com [209.85.215.54]) by mx1.freebsd.org (Postfix) with ESMTP id 68F578FC12; Sun, 3 Oct 2010 12:45:46 +0000 (UTC) Received: by ewy22 with SMTP id 22so1950748ewy.13 for ; Sun, 03 Oct 2010 05:45:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:user-agent:mime-version:content-type; bh=uX7WXshUgzn4gC4fgJJDqNeDpIQfCon/riNvUZcgq7Y=; b=F6i/omlG4pYHg2YCGq8t9p8RU4kmsrF/9Sb7jCd8ypoG1w50jO6ezmuJcAnv0JOb7H 4l4zXivbw94jJCARjFGI1zX0tqFu5xma7XITWyyKqmaNduPIuI9QGG688wht28ZgjB3o lwAxOvkM0FKcXGda0gyQ/juv04YklSUdAYxSo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:user-agent:mime-version :content-type; b=wDlRXpFAYf3kQrlqKUmkZWh2UgslzdTFNRYzKmnKM3hHqQRdlI7EGrP9VO9MlqKhqf /JEkJf0jIKXBHJSgIQXQYTzErkJuhMM1kWKqf5/shbcWL552InUkdoCJsD4yNi0Yw8Y7 EcWIYW5YYAaP932dBOLx08fwIUQj0gbURh0FM= Received: by 10.14.37.10 with SMTP id x10mr4981305eea.33.1286109945529; Sun, 03 Oct 2010 05:45:45 -0700 (PDT) Received: from localhost ([95.69.162.97]) by mx.google.com with ESMTPS id v59sm5320609eeh.22.2010.10.03.05.45.44 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sun, 03 Oct 2010 05:45:44 -0700 (PDT) From: Mikolaj Golub To: freebsd-fs@freebsd.org Date: Sun, 03 Oct 2010 15:45:47 +0300 Message-ID: <86hbh3igw4.fsf@kopusha.home.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (berkeley-unix) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Cc: Pawel Jakub Dawidek Subject: hastd: zombies after hooks X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 03 Oct 2010 12:45:48 -0000 --=-=-= Hi, After recent changes hastd does not garbage collect finished hooks leaving zombies and messages in log like below: Oct 3 18:21:05 bolek hastd[5144]: Hook is running for 1330 seconds (pid=5223, cmd=[/usr/bin/true connect storage]). This is because wait3() in hook_check() is never called (we never call hook_check(true)). Below is a patch that works for me. -- Mikolaj Golub --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=hook_check.patch Index: sbin/hastd/hastd.c =================================================================== --- sbin/hastd/hastd.c (revision 213380) +++ sbin/hastd/hastd.c (working copy) @@ -659,7 +659,7 @@ main_loop(void) assert(maxfd + 1 <= (int)FD_SETSIZE); ret = select(maxfd + 1, &rfds, NULL, NULL, &seltimeout); if (ret == 0) - hook_check(false); + hook_check(); else if (ret == -1) { if (errno == EINTR) continue; Index: sbin/hastd/hooks.c =================================================================== --- sbin/hastd/hooks.c (revision 213380) +++ sbin/hastd/hooks.c (working copy) @@ -293,7 +293,7 @@ hook_check_one(pid_t pid, int status) } void -hook_check(bool sigchld) +hook_check(void) { struct hookproc *hp, *hp2; int status; @@ -303,12 +303,10 @@ void assert(hooks_initialized); /* - * If SIGCHLD was received, garbage collect finished processes. + * Garbage collect finished processes. */ - if (sigchld) { - while ((pid = wait3(&status, WNOHANG, NULL)) > 0) - hook_check_one(pid, status); - } + while ((pid = wait3(&status, WNOHANG, NULL)) > 0) + hook_check_one(pid, status); /* * Report about processes that are running for a long time. Index: sbin/hastd/hooks.h =================================================================== --- sbin/hastd/hooks.h (revision 213380) +++ sbin/hastd/hooks.h (working copy) @@ -41,7 +41,7 @@ void hook_init(void); void hook_fini(void); void hook_check_one(pid_t pid, int status); -void hook_check(bool sigchld); +void hook_check(void); void hook_exec(const char *path, ...); void hook_execv(const char *path, va_list ap); --=-=-=--