[ 
https://issues.apache.org/jira/browse/DERBY-3869?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kathey Marsden updated DERBY-3869:
----------------------------------

    Attachment: derby-3869_diff.txt

So I think I understand why we get the hang.  The ClientThread does not 
actually get interupted when clientThread.interrupt() is called.  This is 
because accept() is not one of the calls that gets interrupted with 
Thread.interrupt().  So the clientThreead sticks around and accepts the ping 
request.  Even after the server socket is closed that socket remains open.  
Attached is my attempt to fix the problem, which closes the clientSocket if the 
server is shutting down.  This rectifies the hang.  The ping request may get an 
insufficient reply data message but I think that is appropriate if the server 
is shutting down.    It is certainly better than a hang.


> intermittent hang pinging  server on Linux
> ------------------------------------------
>
>                 Key: DERBY-3869
>                 URL: https://issues.apache.org/jira/browse/DERBY-3869
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Server
>    Affects Versions: 10.5.0.0
>         Environment: java version "1.6.0"
> Java(TM) SE Runtime Environment (build pxi3260sr1-20080416_01(SR1))
> IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux x86-32 
> jvmxi3260-20080415_1876
> J9VM - 20080415_018762_lHdSMr
> JIT  - r9_20080415_1520
> GC   - 20080415_AA)
> JCL  - 20080412_01
>            Reporter: Kathey Marsden
>            Assignee: Kathey Marsden
>         Attachments: derby-3869_diff.txt, 
> derby-3869_sleep_to_force_hang_diff.txt, derby.log, 
> javacore.20080903.183815.7684.0001.txt, Repro.java, TryHang.java
>
>
>  am looking at a intermittent hang with IBM 1.6 on Linux with the ping 
> command.  I am not entirely sure it is a jvm issue, but I have not been 
> able to reproduce the hang with other jvms.  
> The trace is
> 3XMTHREADINFO      "main" TID:0x08072500, j9thread_t:0x08057AF4, state:R, 
> prio=5
> 3XMTHREADINFO1            (native thread ID:0x1E05, native priority:0x5, 
> native policy:UNKNOWN)
> 4XESTACKTRACE          at java/net/SocketInputStream.socketRead0(Native 
> Method)
> 4XESTACKTRACE          at 
> java/net/SocketInputStream.read(SocketInputStream.java:140)
> 4XESTACKTRACE          at 
> java/net/SocketInputStream.read(SocketInputStream.java:101)
> 4XESTACKTRACE          at 
> org/apache/derby/impl/drda/NetworkServerControlImpl.fillReplyBuffer(NetworkServerControlImpl.java:2764)
> 4XESTACKTRACE          at 
> org/apache/derby/impl/drda/NetworkServerControlImpl.readResult(NetworkServerControlImpl.java:2708)
> 4XESTACKTRACE          at 
> org/apache/derby/impl/drda/NetworkServerControlImpl.pingWithNoOpen(NetworkServerControlImpl.java:1169)
> 4XESTACKTRACE          at 
> org/apache/derby/impl/drda/NetworkServerControlImpl.ping(NetworkServerControlImpl.java:1144(Compiled
>  Code))
> 4XESTACKTRACE          at 
> org/apache/derby/drda/NetworkServerControl.ping(NetworkServerControl.java:395(Compiled
>  Code))
> 4XESTACKTRACE          at Repro.pingForServerUp(Repro.java:38(Compiled Code))
> 4XESTACKTRACE          at Repro.startAndShutdown(Repro.java:20)
> The client has sent the ping, but there is no corresponding session on 
> the server side to process the
> command. The full thread dump is in.
> javacore.20080903.183815.7684.0001.txt
> The  program Repro.java shows the problem. It repeatedly starts the server, 
> pings until it 
> comes up, and then shuts down.
> In the derby.log I see a startup error, that the address is already in 
> use, so presumably the shutdown is not complete before we start the 
> server and then perhaps it shuts down mid ping causing the hang?
> 2008-09-04 01:37:51.048 GMT : Could not listen on port 1527 on host 127.0.0.1:
>  java.net.BindException: Address already in use
> An exception was thrown during network server startup. 
> DRDA_ListenPort.S:Could not listen on port 1527 on host 127.0.0.1:
>  java.net.BindException: Address already in use
> java.lang.reflect.InvocationTargetException
>                at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
>                at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
>                at java.lang.reflect.Method.invoke(Method.java:599)
>                at 
> org.apache.derby.iapi.jdbc.DRDAServerStarter.run(DRDAServerStarter.java:236)
>                at java.lang.Thread.run(Thread.java:735)
> Caused by: java.lang.Exception: DRDA_ListenPort.S:Could not listen on port 
> 1527 on host 127.0.0.1:
>  java.net.BindException: Address already in use
>                at java.lang.Throwable.<init>(Throwable.java:67)
>                at 
> org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessageWork(NetworkServerControlImpl.java:3179)
>                at 
> org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessage(NetworkServerControlImpl.java:1861)
>                at 
> org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(NetworkServerControlImpl.java:731)
>                ... 5 more
> Full log is attached as derby.log

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to