Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Jun 2014 19:29:05 -0400
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        Dawid Weiss <dawid.weiss@gmail.com>, freebsd-java@freebsd.org
Subject:   Re: A call to ServerSocketChannel.accept() cannot be interrupted.
Message-ID:  <53ACACC1.4020102@FreeBSD.org>
In-Reply-To: <CAM21Rt9aqGbTjXQk7GZAdADJh2w=AiFJ4j1hMhtkXDz6LxUKeg@mail.gmail.com>
References:  <CAM21Rt9aqGbTjXQk7GZAdADJh2w=AiFJ4j1hMhtkXDz6LxUKeg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

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

Jung-uk Kim
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBAgAGBQJTrKzBAAoJEHyflib82/FG98oIAIkRA57tLr+sXC/eNgIzJHDX
Dvsn+5f0+JcjRLml6epK1zvCVZIU7SEVdJOMMZucxASlGD87fVPP2Ic4rcJN0EXE
acNtS9nhodDaHFHyzJG6ur1IQdQoMcvtUVvWLbB5hMVO80hbRL8ZltFVfTB+m/Q+
cTZ0Sdmz7DXWbOXTbky7ff03HLULIMjdzf4RgdFH0aPaaC3WiXGiP8hVCx0mM3la
li+jcKESQDMNnsthjNtgrBCICPZW76fzGlnJAH79DLVAqpZWfE0Bdj/c/GF10/Wv
zB8T58o5xNVCE/Xxzz9y9j/vm64odcbDMvaETozxQJW9RZH+EDAtRRz2MtJRE9g=
=Rb/b
-----END PGP SIGNATURE-----



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