User: pkendall
  Date: 01/07/31 18:18:32

  Modified:    src/main/org/jbossmq/il/oil OILServerILService.java
                        OILClientILService.java
  Log:
  Make the sockets fully blocking and close the socket when stopping.  This is to work 
around a bug in Sun's JDK sockets i.e. they don't throw InterruptedException on 
timeout, you get a EOFException and the socket is then stuffed.
  
  Revision  Changes    Path
  1.6       +8 -9      jbossmq/src/main/org/jbossmq/il/oil/OILServerILService.java
  
  Index: OILServerILService.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jbossmq/src/main/org/jbossmq/il/oil/OILServerILService.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- OILServerILService.java   2001/07/31 21:36:23     1.5
  +++ OILServerILService.java   2001/08/01 01:18:32     1.6
  @@ -38,6 +38,7 @@
   import javax.jms.TemporaryQueue;
   import org.jbossmq.TransactionRequest;
   import java.io.IOException;
  +import java.io.EOFException;
   import org.jbossmq.SpyDestination;
   
   /**
  @@ -45,7 +46,7 @@
    *  manage the JVM IL.
    *
    *   @author Hiram Chirino ([EMAIL PROTECTED])
  - *   @version $Revision: 1.5 $
  + *   @version $Revision: 1.6 $
    */
   public class OILServerILService extends ServerILJMXService implements 
OILServerILServiceMBean, Runnable {
        
  @@ -158,6 +159,7 @@
                        if( !running )
                                return;
   
  +                     socket.setSoTimeout(0);
                        new Thread(this,"OIL Worker").start();
                        
                        out = new ObjectOutputStream(new 
BufferedOutputStream(socket.getOutputStream()));
  @@ -174,17 +176,14 @@
                while (!closed && running) {
   
                        try {
  -                             
  -                             //socket.setSoTimeout(SO_TIMEOUT);
                                code=in.readByte();             
  -                             
  -                     } catch ( java.io.InterruptedIOException e ) {
  -                             if( !closed && !running )
  -                                     continue;
  -                     } catch (IOException e) {
  +                     }
  +                     catch ( EOFException e ) {
  +                             break;
  +                     }
  +                     catch ( IOException e ) {
                                if( closed || !running )
                                        break;
  -                                     
                                category.warn("Connection failure (1).", e);
                                break;
                        }
  
  
  
  1.3       +6 -9      jbossmq/src/main/org/jbossmq/il/oil/OILClientILService.java
  
  Index: OILClientILService.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jbossmq/src/main/org/jbossmq/il/oil/OILClientILService.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- OILClientILService.java   2001/07/16 02:51:45     1.2
  +++ OILClientILService.java   2001/08/01 01:18:32     1.3
  @@ -30,7 +30,7 @@
    *   @author Norbert Lataille ([EMAIL PROTECTED])
    *   @author Hiram Chirino ([EMAIL PROTECTED])
    * 
  - *   @version $Revision: 1.2 $
  + *   @version $Revision: 1.3 $
    */
   public class OILClientILService implements org.jbossmq.il.ClientILService, Runnable 
{
        //the client IL
  @@ -58,7 +58,7 @@
        public void start() throws java.lang.Exception {
                
                running = true;
  -             worker = new Thread(connection.threadGroup, this, 
"UILClientILService");
  +             worker = new Thread(connection.threadGroup, this, 
"OILClientILService");
                worker.setDaemon(true);
                worker.start();         
                
  @@ -70,6 +70,7 @@
        public void stop() throws java.lang.Exception {
                running = false;
                worker.interrupt();
  +             socket.close();
        }
   
        static org.apache.log4j.Category cat = 
org.apache.log4j.Category.getInstance(OILClientILService.class);
  @@ -85,12 +86,13 @@
        private ServerSocket serverSocket;
        //The thread that is doing the Socket reading work
        Thread worker;
  +     Socket socket=null;
   
        public void run() {
  -             Socket socket=null;
                int code = 0;
                ObjectOutputStream out = null;
                ObjectInputStream in = null;
  +             socket = null;
   
                try {
                        cat.debug("Waiting for the server to connect to me");
  @@ -106,7 +108,7 @@
                                        return;
                        }
                        serverSocket.close();
  -                     socket.setSoTimeout(30*1000);
  +                     socket.setSoTimeout(0);
                        out = new ObjectOutputStream(new 
BufferedOutputStream(socket.getOutputStream()));
                        out.flush();
                        in = new ObjectInputStream(new 
BufferedInputStream(socket.getInputStream()));
  @@ -124,12 +126,7 @@
                        } catch (java.io.InterruptedIOException e) {
                                continue;
                        } catch (IOException e) {
  -                             if (!running)
  -                                     break;
  -                                     
  -                             connection.asynchFailure("Connection failure", e);
  -                             e.printStackTrace();
  -                             return;
  +                             break;
                        }
   
                        try {
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to