From owner-svn-src-all@FreeBSD.ORG Fri Dec 10 11:03:00 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 58D5E106566C; Fri, 10 Dec 2010 11:03:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2C7058FC08; Fri, 10 Dec 2010 11:03:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oBAB30oJ071712; Fri, 10 Dec 2010 11:03:00 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBAB30g9071710; Fri, 10 Dec 2010 11:03:00 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201012101103.oBAB30g9071710@svn.freebsd.org> From: Konstantin Belousov Date: Fri, 10 Dec 2010 11:03:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r216354 - stable/8/tools/regression/sockets/unix_gc X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Dec 2010 11:03:00 -0000 Author: kib Date: Fri Dec 10 11:02:59 2010 New Revision: 216354 URL: http://svn.freebsd.org/changeset/base/216354 Log: MFC r216151: Extend the unix gc regression test to cover the case of r216150. Approved by: re (bz) Modified: stable/8/tools/regression/sockets/unix_gc/unix_gc.c Directory Properties: stable/8/tools/regression/sockets/unix_gc/ (props changed) Modified: stable/8/tools/regression/sockets/unix_gc/unix_gc.c ============================================================================== --- stable/8/tools/regression/sockets/unix_gc/unix_gc.c Fri Dec 10 10:48:54 2010 (r216353) +++ stable/8/tools/regression/sockets/unix_gc/unix_gc.c Fri Dec 10 11:02:59 2010 (r216354) @@ -55,27 +55,36 @@ static char dpath[PATH_MAX]; static const char *test; static int -getopenfiles(void) +getsysctl(const char *name) { size_t len; int i; len = sizeof(i); - if (sysctlbyname("kern.openfiles", &i, &len, NULL, 0) < 0) - err(-1, "kern.openfiles"); + if (sysctlbyname(name, &i, &len, NULL, 0) < 0) + err(-1, "%s", name); return (i); } static int +getopenfiles(void) +{ + + return (getsysctl("kern.openfiles")); +} + +static int getinflight(void) { - size_t len; - int i; - len = sizeof(i); - if (sysctlbyname("net.local.inflight", &i, &len, NULL, 0) < 0) - err(-1, "net.local.inflight"); - return (i); + return (getsysctl("net.local.inflight")); +} + +static int +getdeferred(void) +{ + + return (getsysctl("net.local.deferred")); } static void @@ -707,6 +716,40 @@ listen_connect_drop(void) test_sysctls(inflight, openfiles); } +static void +recursion(void) +{ + int fd[2], ff[2]; + int inflight, openfiles, deferred, deferred1; + + test = "recursion"; + printf("%s\n", test); + save_sysctls(&inflight, &openfiles); + deferred = getdeferred(); + + my_socketpair(fd); + + for (;;) { + if (socketpair(PF_UNIX, SOCK_STREAM, 0, ff) == -1) { + if (errno == EMFILE || errno == ENFILE) + break; + err(-1, "socketpair"); + } + sendfd(ff[0], fd[0]); + sendfd(ff[0], fd[1]); + close2(fd[1], fd[0]); + fd[0] = ff[0]; + fd[1] = ff[1]; + } + close2(fd[0], fd[1]); + sleep(1); + test_sysctls(inflight, openfiles); + deferred1 = getdeferred(); + if (deferred != deferred1) + errx(-1, "recursion: deferred before %d after %d", deferred, + deferred1); +} + #define RMDIR "rm -Rf " int main(int argc, char *argv[]) @@ -757,6 +800,8 @@ main(int argc, char *argv[]) listen_connect_nothing(); listen_connect_drop(); + recursion(); + printf("Finish: inflight %d open %d\n", getinflight(), getopenfiles()); return (0);