Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Jun 2014 21:55:55 +0200
From:      Dawid Weiss <dawid.weiss@gmail.com>
To:        Jung-uk Kim <jkim@freebsd.org>
Cc:        Uwe Schindler <uwe.h.schindler@googlemail.com>, freebsd-java@freebsd.org
Subject:   Re: A call to ServerSocketChannel.accept() cannot be interrupted.
Message-ID:  <CAM21Rt8VoSz7SnzbenW3uHSMCtnYCkxC1QAJMxE=POPcX1XmbQ@mail.gmail.com>
In-Reply-To: <53ADBBAC.6060207@FreeBSD.org>
References:  <CAM21Rt9aqGbTjXQk7GZAdADJh2w=AiFJ4j1hMhtkXDz6LxUKeg@mail.gmail.com> <53ACACC1.4020102@FreeBSD.org> <53ADBBAC.6060207@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Ugh, thanks Jung-uk! I didn't have the time to test yet, but we
certainly will. Your patch sounds sensible if it compiles and does
similar thing on the BSD; I'm actually surprised nobody raised this
issue before.

I'll confirm if it's working as expected once we roll out the patch,
but big thanks for super-fast turnaround!

Dawid

On Fri, Jun 27, 2014 at 8:45 PM, Jung-uk Kim <jkim@freebsd.org> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 2014-06-26 19:29:05 -0400, Jung-uk Kim wrote:
> 2014?  6? 26? 19:29, Jung-uk Kim ? ?:> On 2014-06-26 17:07:13
> - -0400, Dawid Weiss wrote:
>>> Hi there,
>>
>>> I am an Apache Lucene committer. We've encountered a problem on
>>> one of our test machines and I wondered if it's something known.
>>
>>> The machine is:
>>
>>> FreeBSD 9.1-RELEASE-p3 FreeBSD 9.1-RELEASE-p3 #0 r250118: Tue
>>> Apr 30 22:06:26 UTC 2013
>>
>>> running:
>>
>>> openjdk version "1.7.0_60" OpenJDK Runtime Environment (build
>>> 1.7.0_60-b19) OpenJDK 64-Bit Server VM (build 24.60-b09, mixed
>>> mode)
>>
>>> The problem is actually with Jetty; it creates a connector with a
>>>  thread pool, where each thread calls a blocking
>>> ServerSocketChannel#accept(). Once you close the pool it
>>> attempts to terminate those threads and fails to do so -- and
>>> indeed, you can't break out from accept, not via interrupt(), not
>>> via closing the acquired ServerSocketChannel. The documentation
>>> of accept() states ClosedByInterruptException should be thrown if
>>> the thread is interrupted and indeed, this is the behavior on
>>> Linux and Windows.
>>
>>> A test case and more verbose problem description is here:
>>> https://issues.apache.org/jira/browse/SOLR-6204
>>
>>>> From what I've diagnosed so far this seems to be an incomplete
>>> implementation problem. ServerSocketChannel attempts to signal
>>> the thread waiting on the socket (on Linux) via
>>> NativeThread.java, but in the native code (the only one I could
>>> find in ports) it's defined as:
>>
>>> JNIEXPORT jlong JNICALL
>>> Java_sun_nio_ch_NativeThread_current(JNIEnv *env, jclass cl) {
>>> #ifdef __linux__ return (long)pthread_self(); #else return -1;
>>> #endif }
>>
>>> JNIEXPORT void JNICALL
>>> Java_sun_nio_ch_NativeThread_signal(JNIEnv *env, jclass cl, jlong
>>> thread) { #ifdef __linux__ if (pthread_kill((pthread_t)thread,
>>> INTERRUPT_SIGNAL)) JNU_ThrowIOExceptionWithLastError(env, "Thread
>>> signal failed"); #endif
>>
>>> Which would indicate a no-op call. And indeed, I recompiled
>>> ServerSocketChannel with some debugging sysouts and the
>>> NativeThread.current() call returns -1.
>>
>>> Thoughts?
>>
>> Can you please try this patch?
>>
>> https://svn.redports.org/jkim/java/openjdk7/files/patch-src-solaris-native-sun-nio-ch-NativeThread.c
>
> I
>>
> just committed it.
>
> http://svnweb.freebsd.org/changeset/ports/359595
>
> At least, it passed your test case in the PR. ;-)
>
> Thanks!
>
> Jung-uk Kim
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v2
>
> iQEcBAEBAgAGBQJTrburAAoJEHyflib82/FGok8H/3Q4uTaQD76zQct7cQSkL6xH
> me42dXU4SgM6sH+VWBPqyi0ZMxvcYPyf4lx3tZSgM6CO9EeC8GEVBUq7w8X8ciQw
> xyIRwOyO3YcaQYJ3b4E6kO55ybRGbfIH+/ZTHwQ8nRVya3s1ZF6jnUKdWypz19h8
> 9EqqARhIf2g5LqzFR73QibhdMtDlwRe6+pXxv6WaHVijhVmy4wbVC6f8aAyxPycs
> cmGeVnRQa+0pqZGFsbh62HS/7yEW8PrqNC2D0OunwA/hWQwopFOc7QbW0gzTYPv/
> 74j1krlSpbgxo1LATVUsvpLbVQcIwcFtj0eMfslVmCg9FtZUl52Q2sVA68FAGyU=
> =amiL
> -----END PGP SIGNATURE-----



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