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.InitialContex
> 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/




Reply via email to