Date: Tue, 29 Jan 2013 05:06:46 +0000 (UTC) From: Greg Lewis <glewis@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r311149 - in head/java/openjdk7: . files Message-ID: <201301290506.r0T56k8o063331@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glewis Date: Tue Jan 29 05:06:46 2013 New Revision: 311149 URL: http://svnweb.freebsd.org/changeset/ports/311149 Log: . Fix a crash under heavy network load by reverting to using poll(2) rather than select(2). PR: 175417 Based on the patch by: Phil Phillips <pphillips@experts-exchange.com> Added: head/java/openjdk7/files/patch-bsd_close.c (contents, props changed) Modified: head/java/openjdk7/Makefile Modified: head/java/openjdk7/Makefile ============================================================================== --- head/java/openjdk7/Makefile Tue Jan 29 04:03:29 2013 (r311148) +++ head/java/openjdk7/Makefile Tue Jan 29 05:06:46 2013 (r311149) @@ -7,6 +7,7 @@ PORTNAME= openjdk PORTVERSION= ${JDK_MAJOR_VERSION}.${PORT_MINOR_VERSION}.${PORT_BUILD_NUMBER} +PORTREVISION= 1 CATEGORIES= java devel MASTER_SITES= http://download.java.net/openjdk/jdk${JDK_MAJOR_VERSION}u${JDK_MINOR_VERSION}/promoted/b${JDK_BUILD_NUMBER}/ \ http://download.java.net/jaxp/1.4.5/:jaxp \ Added: head/java/openjdk7/files/patch-bsd_close.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/java/openjdk7/files/patch-bsd_close.c Tue Jan 29 05:06:46 2013 (r311149) @@ -0,0 +1,85 @@ +--- jdk/src/solaris/native/java/net/bsd_close.c Wed Jan 16 16:04:50 2013 -0800 ++++ jdk/src/solaris/native/java/net/bsd_close.c Thu Jan 17 22:14:02 2013 -0800 +@@ -345,6 +345,76 @@ + * signal other than our wakeup signal. + */ + int NET_Timeout(int s, long timeout) { ++/* ++ * On MacOS X, poll(2) is not working correctly, so a select(2) based ++ * implementation is preferred. See ++ * ++ * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7131399 ++ * ++ * However, on FreeBSD, the select(2) based implementation can cause ++ * crashes under load and poll(2) is preferred. See ++ * ++ * http://docs.freebsd.org/cgi/getmsg.cgi?fetch=215525+0+current/freebsd-java ++ * ++ * Other *BSD should adjust as appropriate. ++ */ ++#ifdef __FreeBSD__ ++ long prevtime = 0, newtime; ++ struct timeval t; ++ fdEntry_t *fdEntry = getFdEntry(s); ++ ++ /* ++ * Check that fd hasn't been closed. ++ */ ++ if (fdEntry == NULL) { ++ errno = EBADF; ++ return -1; ++ } ++ ++ /* ++ * Pick up current time as may need to adjust timeout ++ */ ++ if (timeout > 0) { ++ gettimeofday(&t, NULL); ++ prevtime = t.tv_sec * 1000 + t.tv_usec / 1000; ++ } ++ ++ for(;;) { ++ struct pollfd pfd; ++ int rv; ++ threadEntry_t self; ++ ++ /* ++ * Poll the fd. If interrupted by our wakeup signal ++ * errno will be set to EBADF. ++ */ ++ pfd.fd = s; ++ pfd.events = POLLIN | POLLERR; ++ ++ startOp(fdEntry, &self); ++ rv = poll(&pfd, 1, timeout); ++ endOp(fdEntry, &self); ++ ++ /* ++ * If interrupted then adjust timeout. If timeout ++ * has expired return 0 (indicating timeout expired). ++ */ ++ if (rv < 0 && errno == EINTR) { ++ if (timeout > 0) { ++ gettimeofday(&t, NULL); ++ newtime = t.tv_sec * 1000 + t.tv_usec / 1000; ++ timeout -= newtime - prevtime; ++ if (timeout <= 0) { ++ return 0; ++ } ++ prevtime = newtime; ++ } ++ } else { ++ return rv; ++ } ++ ++ } ++#else + long prevtime = 0, newtime; + struct timeval t, *tp = &t; + fdEntry_t *fdEntry = getFdEntry(s); +@@ -414,4 +484,5 @@ + } + + } ++#endif + }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301290506.r0T56k8o063331>