The 2.1.1 has exactly the same behavior here. The reader thread stucks at
read even after socket.close(). After about 1 minute the read returns
without any exception and the program then terminates properly. I'll try
to solve it today and will eventually deploy 2.1.2 again.
--
Andreas Mueller, IIT GmbH, Bremen/Germany, http://www.iit.de
SwiftMQ - JMS Enterprise Messaging System, http://www.swiftmq.com
-----Original Message-----
From: Geoffrey Lowney <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Date: Fri, 29 Jun 2001 23:31:09 +0200
Subject: [developers] progarm hangs under 2.1.2
> The -classic option doesn't help me. I tried it and saw the same
> results.
> My installation of java may not have the classic environment (though no
> error was emitted). Do you suggest we stick with 2.1.1 until a future
> release can solve this problem (or some other solution is found)?
>
> Thanks
>
> Geoffrey A. Lowney
> Senior Software Development Engineer
> Recreational Equipment, Inc.
> Phone 253-395-8164 Fax 253-437-7291
> Pager 206-625-8477 [EMAIL PROTECTED]
> [EMAIL PROTECTED] http://www.rei.com/
> In order to draw a limit to thinking, we should have to think both
> sides
> of this limit.
> -- Ludwig Wittgenstein, Tractatus Logico-Philosophicus
>
>
>
> > -----Original Message-----
> > From: Andreas Mueller [mailto:[EMAIL PROTECTED]]
> > Sent: Friday, June 29, 2001 2:14 PM
> > To: [EMAIL PROTECTED]
> > Subject: [developers] progarm hangs under 2.1.2
> >
> >
> > We've experienced the same behavior, although we haven't
> > changed anything
> > there. The same program exits under NT but not under Unix
> > (1.3.0 hotspot).
> > We've checked all threads and they are terminating properly.
> > We terminate the reader thread with socket.close() and
> > additionally we do
> > a hardcore stop() on the reader thread in connection.close().
> > It hangs
> > in read. But if we start the JVM with java -classic, the
> > program exists
> > properly!
> >
> > > "Thread-0" (TID:0x80033668, stillborn, sys_thread_t:0x30522840,
> > > state:R,
> > > native ID:0x405) prio=5: pending=java.lang.ThreadDeath
> >
> > As you see above, the Thread is death.
> >
> > --
> > Andreas Mueller, IIT GmbH, Bremen/Germany, http://www.iit.de
> > SwiftMQ - JMS Enterprise Messaging System, http://www.swiftmq.com
> >
> >
> > -----Original Message-----
> > From: Geoffrey Lowney <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Date: Fri, 29 Jun 2001 22:19:20 +0200
> > Subject: [developers] progarm hangs under 2.1.2
> >
> > > Programs which seemed to work fine under 2.1.1 have strange
> problems
> > > under
> > > 2.1.2. For example, the program below is a simple test
> > program which
> > > creates a connection and then destroys the connection.
> > Nothing else is
> > > done. Under 2.1.1 the program runs fine. Under 2.1.2 the program
> > > never
> > > exits. It appears that the problem may be a swiftmq thread
> > is hanging
> > > (see
> > > the javacore details below).
> > >
> > > I am not an expert at JMS or SwiftMQ (or even Java for that
> > matter), so
> > > it
> > > is possible there are errors in my code (masked by 2.1.1 bugs?). I
> > > would
> > > appreciate suggestions regarding the steps the code uses to
> > connect and
> > > disconnect from the router.
> > >
> > > Any idea what is going on? Has anyone else seen problems
> > with 2.1.2?
> > > Some
> > > of my other programs under 2.1.2 appear to have problems which also
> > > seem to
> > > be related to threads hanging (I see javacore output
> > similar to what I
> > > show
> > > below).
> > >
> > > Thanks
> > >
> > > Geoffrey A. Lowney
> > > Senior Software Development Engineer
> > > Recreational Equipment, Inc.
> > > Phone 253-395-8164 Fax 253-437-7291
> > > Pager 206-625-8477 [EMAIL PROTECTED]
> > > [EMAIL PROTECTED] http://www.rei.com/
> > >
> > > Here are the gory details of my test program and results...
> > >
> > > JVM version: J2RE 1.2.2 IBM build ca122-19991217
> > > OS Level : AIX 4.3.3.0
> > >
> > > Here is the output from the program. It looks the same
> > under 2.1.1 and
> > > 2.1.2.
> > >
> > > $ java com.rei.mom.ConnectTest
> > > main: entering go
> > > main: entering connect
> > > main: creating Context
> > > main: Context created
> > > main: creating QueueConnectionFactory
> > > main: creating QueueConnection
> > > main: creating QueueSession
> > > main: creating Queue
> > > main: starting QueueConnection
> > > main: closing Context
> > > main: leaving connect
> > > main: entering disconnect
> > > main: closing QueueSession
> > > main: closing QueueConnection
> > > main: leaving disconnect
> > > main: leaving go
> > > $
> > >
> > > Under 2.1.2, after the final message is displayed, I generated a
> > > javacore.
> > > Here is the thread that appears to be hanging (its the only one in
> R
> > > state,
> > > and the only one that references swiftmq):
> > >
> > > "Thread-0" (TID:0x80033668, stillborn, sys_thread_t:0x30522840,
> > > state:R,
> > > native ID:0x405) prio=5: pending=java.lang.ThreadDeath
> > > at java.net.SocketInputStream.socketRead(Native Method)
> > > at
> > java.net.SocketInputStream.read(SocketInputStream.java:98)
> > > at
> > > java.io.BufferedInputStream.fill(BufferedInputStream.java(Compiled
> > > Code))
> > > at
> > > java.io.BufferedInputStream.read(BufferedInputStream.java(Compiled
> > > Code))
> > > at
> > > java.io.DataInputStream.readInt(DataInputStream.java(Compiled
> > > Code))
> > > at
> > >
> com.swiftmq.tools.dump.Dumpalizer.construct(Dumpalizer.java(Compiled
> > > Code))
> > > at
> > >
> >
> com.swiftmq.jms.ConnectionImpl.readObject(ConnectionImpl.java(Compiled
> > > Code))
> > > at
> > com.swiftmq.jms.ConnectionImpl.run(ConnectionImpl.java:424)
> > > at java.lang.Thread.run(Thread.java:481)
> > > ----- Native Stack -----
> > > merge_into_successors
> > > _pthread_event_wait
> > > _cond_wait_local
> > > _cond_wait
> > > pthread_cond_wait
> > > try_suspend
> > > realObjAlloc
> > > allocArray
> > > utf2JavaString
> > > jni_NewStringUTF
> > > jni_ThrowNew
> > > JNU_ThrowByName
> > > NET_ThrowNew
> > > NET_ThrowCurrent
> > > Java_java_net_SocketInputStream_socketRead
> > > mmisInvoke_OIIOO_IHelper
> > > entryCmp
> > >
> > > Here is the test program (username, password and queuename
> removed):
> > >
> > > ///////////////////////////////////////////////////////////
> > > package com.rei.mom;
> > >
> > > import javax.jms.*;
> > > import javax.naming.*;
> > > import java.util.*;
> > > import com.rei.mom.*;
> > >
> > > public class ConnectTest {
> > > public static final String QUEUECONFAC =
> "QueueConnectionFactory";
> > > private String username = "******";
> > > private String password = "******";
> > > private String queueName = "*******";
> > > private Context jndiContext = null;
> > > private QueueConnectionFactory queueConnectionFactory = null;
> > > private QueueConnection queueConnection = null;
> > > private QueueSession queueSession = null;
> > > private Queue queue = null;
> > >
> > > public static void main(String[] args) {
> > > ConnectTest test = new ConnectTest();
> > > test.go();
> > > }
> > >
> > > public void go() {
> > > System.out.println(Thread.currentThread().getName() +
> > ": entering
> > > go");
> > > connect();
> > > disconnect();
> > > System.out.println(Thread.currentThread().getName() + ":
> leaving
> > > go");
> > > }
> > >
> > > public void connect() {
> > > System.out.println(Thread.currentThread().getName() +
> > ": entering
> > > connect");
> > > try {
> > > if (jndiContext == null) {
> > > Hashtable env = new Hashtable();
> > >
> > >
> > env.put(Context.INITIAL_CONTEXT_FACTORY,"com.swiftmq.jndi.Init
> > ialContex
> > > tFact
> > > oryImpl");
> > >
> > >
> env.put(Context.PROVIDER_URL,"smqp://localhost:4001/timeout=10000");
> > > System.out.println(Thread.currentThread().getName() + ":
> > > creating
> > > Context");
> > > jndiContext = new InitialContext(env);
> > > System.out.println(Thread.currentThread().getName() + ":
> > > Context
> > > created");
> > > }
> > > if (queueConnection == null) {
> > > if (queueConnectionFactory == null) {
> > > System.out.println(Thread.currentThread().getName() + ":
> > > creating
> > > QueueConnectionFactory");
> > > queueConnectionFactory = (QueueConnectionFactory)
> > > jndiContext.lookup(QUEUECONFAC);
> > > }
> > > System.out.println(Thread.currentThread().getName() + ":
> > > creating
> > > QueueConnection");
> > > queueConnection =
> > > queueConnectionFactory.createQueueConnection(username,
> > > password);
> > > }
> > > System.out.println(Thread.currentThread().getName() +
> > ": creating
> > > QueueSession");
> > > queueSession = queueConnection.createQueueSession(false,
> > > Session.AUTO_ACKNOWLEDGE);
> > > System.out.println(Thread.currentThread().getName() +
> > ": creating
> > > Queue");
> > > queue = (Queue) jndiContext.lookup(queueName);
> > > System.out.println(Thread.currentThread().getName() +
> > ": starting
> > > QueueConnection");
> > > queueConnection.start();
> > > if (jndiContext != null) {
> > > System.out.println(Thread.currentThread().getName() + ":
> > > closing
> > > Context");
> > > jndiContext.close();
> > > jndiContext = null;
> > > }
> > > } catch (Exception e) {
> > > System.out.println(Thread.currentThread().getName() +
> > > e.toString());
> > > }
> > > System.out.println(Thread.currentThread().getName() + ":
> leaving
> > > connect");
> > > }
> > >
> > > public void disconnect() {
> > > System.out.println(Thread.currentThread().getName() +
> > ": entering
> > > disconnect");
> > > try {
> > > if (queueSession != null) {
> > > System.out.println(Thread.currentThread().getName() + ":
> > > closing
> > > QueueSession");
> > > queueSession.close();
> > > }
> > > if (queueConnection != null) {
> > > System.out.println(Thread.currentThread().getName() + ":
> > > closing
> > > QueueConnection");
> > > queueConnection.close();
> > > }
> > > if (jndiContext != null) {
> > > System.out.println(Thread.currentThread().getName() + ":
> > > closing
> > > Context");
> > > jndiContext.close();
> > > }
> > > } catch (Exception e) {
> > > System.out.println(Thread.currentThread().getName() +
> > > e.toString());
> > > } finally {
> > > queue = null;
> > > queueSession = null;
> > > queueConnection = null;
> > > queueConnectionFactory = null;
> > > jndiContext = null;
> > > }
> > > System.out.println(Thread.currentThread().getName() + ":
> leaving
> > > disconnect");
> > > }
> > > }
> > > ///////////////////////////////////////////////////////////
> > >
> > > ------------------------------------------------------
> > > SwiftMQ developers mailing list * http://www.swiftmq.com
> > > To unsubscribe from this list, send an eMail to
> > > [EMAIL PROTECTED] and write in the body of your message:
> > > UNSUBSCRIBE developers <your-email-address>
> > > Archive: http://www.mail-archive.com/developers@mail.iit.de/
> > >
> > >
> > >
> > >
> >
> >
> > ------------------------------------------------------
> > SwiftMQ developers mailing list * http://www.swiftmq.com
> > To unsubscribe from this list, send an eMail to
> > [EMAIL PROTECTED] and write in the body of your message:
> > UNSUBSCRIBE developers <your-email-address>
> > Archive: http://www.mail-archive.com/developers@mail.iit.de/
> >
> >
> >
> >
>
> ------------------------------------------------------
> SwiftMQ developers mailing list * http://www.swiftmq.com
> To unsubscribe from this list, send an eMail to
> [EMAIL PROTECTED] and write in the body of your message:
> UNSUBSCRIBE developers <your-email-address>
> Archive: http://www.mail-archive.com/developers@mail.iit.de/
>
>
>
>
------------------------------------------------------
SwiftMQ developers mailing list * http://www.swiftmq.com
To unsubscribe from this list, send an eMail to
[EMAIL PROTECTED] and write in the body of your message:
UNSUBSCRIBE developers <your-email-address>
Archive: http://www.mail-archive.com/developers@mail.iit.de/