Client hangs in receiveNoWait() (exolabcore-0.3.7.jar byte code bug ?)

"Remi Lefevre" <[email protected]> Mon, 30 Apr 2007 14:00:39 +0200
Newsgroups gmane.comp.java.openjms.user
Message-ID <[email protected]>
Hi,

I use openjms 0.7.6.1 and the exolabcore-0.3.7.jar included in the
release package.

When I restart my openjms server (unavailable for a few seconds), the
client which periodically checks for new messages sometimes hangs
indefinitely on the receiveNoWait() call  instead of properly losing
the connection as this happens most of the time.

When this happens, the client connections are stucked in CLOSE_WAIT state:

tcp        1      0 10.0.0.1:47113       10.0.0.2:3035
CLOSE_WAIT  26670/java
tcp        1      0 10.0.0.1:46371       10.0.0.2:3035
CLOSE_WAIT  12377/java
tcp        1      0 10.0.0.1:46182       10.0.0.2:3035
CLOSE_WAIT  12377/java
tcp        1      0 10.0.0.1:46297       10.0.0.2:3035
CLOSE_WAIT  12377/java
tcp        1      0 10.0.0.1:46240       10.0.0.2:3035
CLOSE_WAIT  12377/java
tcp        1      0 10.0.0.1:47005       10.0.0.2:3035
CLOSE_WAIT  26670/java

Here is the thread dump of the blocked thread doing the receiveNoWait
call (it is always exactly the same one):

Apr 16 12:14:57 client wrapper[info] 100  jvm 1 "TimerThread -
Thread[Thread-22,6,main]" prio=7 tid=0x02f859f8 nid=0x694 in
Object.wait() [b3ff000..b3ffd94]
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
java.lang.Object.wait(Native Method)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
java.lang.Object.wait(Unknown Source)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.core.mipc.Queue.remove(Queue.java:93)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 - locked <0x12f619a0>
(a java.util.LinkedList)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.core.mipc.QueueInputStream.receive(QueueInputStream.java:93)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.core.mipc.ObjectChannel.receive(ObjectChannel.java:141)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.jms.client.mipc.IpcJmsSessionStub.checkReply(IpcJmsSessionStub.java:841)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.jms.client.mipc.IpcJmsSessionStub.receiveMessage(IpcJmsSessionStub.java:243)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 - locked <0x12f619d8>
(a org.exolab.core.mipc.ObjectChannel)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.jms.client.JmsSession.retrieveMessage(JmsSession.java:728)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 - locked <0x12f62db0>
(a java.lang.Object)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.jms.client.JmsMessageConsumer.retrieveMessage(JmsMessageConsumer.java:322)
Apr 16 12:14:57 client wrapper[info] 100  jvm 1 at
org.exolab.jms.client.JmsMessageConsumer.receiveNoWait(JmsMessageConsumer.java:230)


Now here is the suprising thing:

Because I wanted to insert some debug code in exolabcore classes, I
checked it out from CVS and compiled it with java 1.4.2.
Before doing any modification, I tested that the jar was working
correctly and, surprisingly, the bug had disappeared (I was previously
able to reproduce it very easily with the release version). This
raises a few questions:

- Is the CVS source code of exolabcore (HEAD) exactly the same as the
one used to release exolabcore-0.3.7.jar ?
- Is there any way to know which version of java (javac) had been used
to compile the release version of exolabcore-0.3.7 (and
openjms-0.7.6.1) ?
- Is it possible that the problem comes from the byte code of
exolabcore-0.3.7 release version (decompiling this version and my own
compiled one raised quite a lot of differences) ?
- If so, should I recompile the whole openjms-0.7.6.1 code to prevent
others issues ?


Sorry for all these questions, but I'm puzzled by this issue.

Best regards,

R. Lefevre

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/