Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Jun 2016 21:56:01 +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: r416826 - in head/java/openjdk8: . files
Message-ID:  <201606122156.u5CLu1CA074452@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glewis
Date: Sun Jun 12 21:56:01 2016
New Revision: 416826
URL: https://svnweb.freebsd.org/changeset/ports/416826

Log:
  . Use poll() rather than select() on BSD to avoid crashes during network
    timeouts.  This is forwarded ported from OpenJDK 7.
  . Bump PORTREVISION for this fix.
  
  PR:		210191
  Submitted by:	Andrew Smith <iamasmith.home@gmail.com>

Added:
  head/java/openjdk8/files/patch-jdk-src-solaris-native-java-net-bsd_close.c   (contents, props changed)
Modified:
  head/java/openjdk8/Makefile

Modified: head/java/openjdk8/Makefile
==============================================================================
--- head/java/openjdk8/Makefile	Sun Jun 12 21:53:48 2016	(r416825)
+++ head/java/openjdk8/Makefile	Sun Jun 12 21:56:01 2016	(r416826)
@@ -2,6 +2,7 @@
 
 PORTNAME=	openjdk
 PORTVERSION=	${JDK_MAJOR_VERSION}.${JDK_UPDATE_VERSION}.${JDK_BUILD_NUMBER:S/^0//}
+PORTREVISION=	1
 CATEGORIES=	java devel
 MASTER_SITES=	http://download.java.net/openjdk/jdk${JDK_MAJOR_VERSION}/promoted/b${DIST_BUILD_NUMBER}/:jdk \
 		https://adopt-openjdk.ci.cloudbees.com/job/jtreg/${JTREG_JENKINS_BUILD}/artifact/:jtreg \

Added: head/java/openjdk8/files/patch-jdk-src-solaris-native-java-net-bsd_close.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/java/openjdk8/files/patch-jdk-src-solaris-native-java-net-bsd_close.c	Sun Jun 12 21:56:01 2016	(r416826)
@@ -0,0 +1,85 @@
+--- ./jdk/src/solaris/native/java/net/bsd_close.c	Fri Apr 15 03:53:39 2016 +0100
++++ ./jdk/src/solaris/native/java/net/bsd_close.c	Sun May 01 21:26:40 2016 -0700
+@@ -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 will use poll(2) for now, but please adjust as appropriate.
++ */
++#ifndef __APPLE__
++    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;
+     fd_set fds;
+@@ -431,4 +501,5 @@
+         }
+ 
+     }
++#endif
+ }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606122156.u5CLu1CA074452>