Author: remm
Date: Tue May 29 04:24:13 2007
New Revision: 542491

URL: http://svn.apache.org/viewvc?view=rev&rev=542491
Log:
- My own view on the Comet API extensions. The main differences are:
  * remove robustness checks (I believe they are not useful, as they have a 
performance cost, only handle the most
    evident "issues", and even for those evident "issues" are most likely 
arbitrary)
  * very simple calls and no additional data structures exposed to the end user
  * merge write notifications mode with non blocking; non blocking is never 
configured in an explicit way
  * pick up the SocketStatus additions
  * most likely backwards compatible with Comet from Tomcat 6.0
- No actual connector updates yet (for APR, the main change is to do timeout 
handling using Java, which is overdue).

Modified:
    tomcat/sandbox/comet/java/org/apache/catalina/CometEvent.java
    tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java
    tomcat/sandbox/comet/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/sandbox/comet/java/org/apache/catalina/connector/OutputBuffer.java
    tomcat/sandbox/comet/java/org/apache/catalina/connector/Request.java
    tomcat/sandbox/comet/java/org/apache/catalina/connector/Response.java
    tomcat/sandbox/comet/java/org/apache/coyote/ActionCode.java
    tomcat/sandbox/comet/java/org/apache/coyote/Response.java
    tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java
    tomcat/sandbox/comet/java/org/apache/tomcat/util/net/NioEndpoint.java
    tomcat/sandbox/comet/java/org/apache/tomcat/util/net/SocketStatus.java

Modified: tomcat/sandbox/comet/java/org/apache/catalina/CometEvent.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/CometEvent.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/catalina/CometEvent.java (original)
+++ tomcat/sandbox/comet/java/org/apache/catalina/CometEvent.java Tue May 29 
04:24:13 2007
@@ -20,7 +20,6 @@
 
 import java.io.IOException;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -145,99 +144,46 @@
      * @param timeout The timeout in milliseconds for this connection, must be 
a positive value, larger than 0
      * @throws IOException An IOException may be thrown to indicate an IO 
error, 
      *         or that the EOF has been reached on the connection
-     * @throws ServletException An exception has occurred, as specified by the 
root
-     *         cause
-     * @throws UnsupportedOperationException if per connection timeout is not 
supported, either at all or at this phase
-     *         of the invocation.
      */
     public void setTimeout(int timeout)
-        throws IOException, ServletException, UnsupportedOperationException;
-    
-    
+        throws IOException;
 
     /**
-     * COMET_NON_BLOCKING
-     * Option bit set for allowing non blocking IO
-     * when reading from the request or writing to the response
-     * COMET_NO_IO
-     * Option bit set to not register for any IO events
-     * Connections can be reregistered for IO events using the 
-     * @see #configure(int)
-     */
-    public enum CometConfiguration {COMET_NON_BLOCKING,COMET_NO_IO};
-        
-    /**
-     * Configures the connection for desired IO options.
-     * By default a Comet connection is configured for <br/>
-     * a) Blocking IO - standard servlet usage<br/>
-     * b) Register for READ events when data arrives<br/>
-     * Tomcat Comet allows you to configure for additional options:<br/>
-     * the <code>COMET_NON_BLOCKING</code> bit signals whether writing and 
reading from the request 
-     * or writing to the response will be non blocking.<br/>
-     * the <code>COMET_NO_IO</code> bit signals the container that you are not 
interested in 
-     * receiving any IO events from the container.
-     * @param cometOptions int - the option bit set, see #COMET_NON_BLOCKING 
and #COMET_NO_IO
-     * @throws IOException -
-     * @throws IllegalStateException - if this method is invoked outside of 
the BEGIN event
-     */
-    public void configure(CometConfiguration... options)
-        throws IOException, IllegalStateException;
-    
-    /**
-     * Returns the configuration for this Comet connection
-     * @return CometConfiguration[]
-     * @see #configure(CometConfiguration...)
-     */
-    public CometConfiguration[] getConfiguration();
-    
-    /**
-     * OP_CALLBACK - receive a CALLBACK event from the container
-     * OP_READ - receive a READ event when the connection has data to be read
-     * OP_WRITE - receive a WRITE event when the connection is able to receive 
data to be written
-     * @see #register(CometOperations)
-     */
-    public enum CometOperation {OP_CALLBACK, OP_READ, OP_WRITE};
-    
-    /**
-     * Registers the Comet connection with the container for IO notifications.
-     * These could be notifications 
-     * @param operations
-     * @throws IOException
-     * @throws IllegalStateException - if you are trying to register with a 
socket that already is registered
-     * or if the operation you are trying to register is invalid.
-     */
-    public void register(CometOperation... operations)
-        throws IOException, IllegalStateException;
-    
-    /**
-     * Unregisters Comet operations for this CometConnection
-     * @param operations CometOperation[]
-     * @throws IOException
-     * @throws IllegalStateException
+     * Returns true if write notifications are disabled, or is they are 
enabled and data may
+     * be written to the connection (the flag becomes false when the client is 
unable to accept
+     * data fast enough). When the flag becomes 
+     * 
+     * @return boolean true if you can write to the response 
      */
-    public void unregister(CometOperation... operations)
-        throws IOException, IllegalStateException;
+    public boolean isWriteable();
 
     /**
-     * Returns what the current IO notifications that the Comet
-     * connection is registered for.
-     * @return CometOperations[]
-     * @see #register(CometOperations...)
+     * Returns true if the Comet connection is blocking or non blocking and 
data is available to be read.
+     * If attempting to read in non blocking mode and this flag is false, an 
IO exception will occur.
+     * 
+     * @see javax.servlet.ServletRequest#getInputStream()#available()>0
+     * @return boolean
      */
-    public CometOperation[] getRegisteredOps();
-    
+    public boolean isReadable();
+
     /**
-     * Returns true if the Comet connection is blocking or non blocking and 
you can write
-     * without blocking data to the response
-     * @return boolean - true if you can write to the response 
+     * Configure notifications that will be recieved. This method should be 
called during the processing of
+     * the begin event. If configure is not called, the behavior will be the 
same as if configure(true, false)
+     * is called.
+     * 
+     * @param read if true, read events will be sent to the servlet
+     * @param write if true, the connection will be placed in non blocking 
mode, and write notifications
+     *        may be requested by using the sendNotify method
      */
-    public boolean isWriteable();
-    
+    public void configure(boolean read, boolean write);
+
     /**
-     * Returns true if the Comet connection is blocking or non blocking and 
data is available to be read
-     * @see javax.servlet.ServletRequest#getInputStream()#available()>0
-     * @return boolean
+     * Send a notify event to the servlet.
+     * 
+     * @param write with the value true should be called when isWriteable 
becomes false, to request notification
+     *        when the connection becomes available for writing again; with 
the value false, a notify event 
+     *        will be sent to the servlet
      */
-    public boolean isReadable();
+    public void callback(boolean write);
 
 }

Modified: 
tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/catalina/connector/CometEventImpl.java 
Tue May 29 04:24:13 2007
@@ -69,23 +69,6 @@
      */
     protected EventSubType eventSubType = null;
     
-    /**
-     * Current set of operations
-     */
-    protected HashSet<CometOperation> cometOperations = new 
HashSet<CometOperation>(3);
-    
-    /**
-     * Current set of configurations
-     */
-    protected HashSet<CometConfiguration> cometConfigurations = new 
HashSet<CometConfiguration>(3);
-
-    protected WorkerThreadCheck threadCheck = new WorkerThreadCheck();
-
-    private static final Object threadCheckHolder = new Object();
-    
-    protected boolean readable = false;
-    
-    protected boolean writeable = false;
     // --------------------------------------------------------- Public Methods
 
     /**
@@ -128,77 +111,41 @@
         return response.getResponse();
     }
 
-    public void setTimeout(int timeout) throws IOException, 
ServletException,UnsupportedOperationException {
-        //this check should get removed as soon as connection timeout is 
implemented everywhere.
-        if (request.getAttribute("org.apache.tomcat.comet.timeout.support") == 
Boolean.TRUE) {
-            request.action(ActionCode.ACTION_COMET_TIMEOUT,new 
Integer(timeout));
-        } else {
-            throw new UnsupportedOperationException();
-        }
+    public void setTimeout(int timeout)
+        throws IOException {
+        request.setTimeout(timeout);
     }
     
     public boolean isReadable() {
-        return readable;
+        return request.isReadable();
     }
-    
-    public void setReadable(boolean r) {
-        this.readable = r;
-    }
-    
+
     public boolean isWriteable() {
-        return writeable;
-    }
-    
-    public void setWriteable(boolean w) {
-        this.writeable = w;
+        return response.isWriteable();
     }
     
-    public void configure(CometEvent.CometConfiguration... options)
-        throws IOException, IllegalStateException {
-        checkWorkerThread();
-        synchronized (cometConfigurations) {
-            cometConfigurations.clear();
-            for (CometEvent.CometConfiguration cc : options) {
-                cometConfigurations.add(cc);
-            }
-            request.action(ActionCode.ACTION_COMET_CONFIGURE,options);
-        }
+    /**
+     * Configure notifications that will be recieved.
+     * 
+     * @param read if true, read events will be sent to the servlet 
+     * @param write if true, the connection will be placed in non blocking 
mode, and write notifications
+     *        may be requested by using the sendNotify method
+     */
+    public void configure(boolean read, boolean write) {
+        
     }
 
-    public void register(CometEvent.CometOperation... operations)
-        throws IOException, IllegalStateException {
-        synchronized (cometOperations) {
-            //add it to the registered set
-            for (CometEvent.CometOperation co : operations) {
-                if (!cometOperations.contains(co)) {
-                    cometOperations.add(co);
-                    request.action(ActionCode.ACTION_COMET_REGISTER, co);
-                }
-            }
-        }
+    /**
+     * Send a notify event to the servlet.
+     * 
+     * @param write with the value true should be called when isWriteable 
becomes false, to request notification
+     *        when the connection becomes available for writing again; with 
the value false, a notify event 
+     *        will be sent to the servlet
+     */
+    public void callback(boolean write) {
+        
     }
 
-    public void unregister(CometOperation... operations)
-        throws IOException, IllegalStateException {
-        synchronized (cometOperations) {
-            //remove from the registered set
-            for (CometEvent.CometOperation co : operations) {
-                if (cometOperations.contains(co)) {
-                    cometOperations.remove(co);
-                    request.action(ActionCode.ACTION_COMET_UNREGISTER, co);
-                }
-            }
-        }
-    }
-    
-    public CometConfiguration[] getConfiguration() {
-        return (CometConfiguration[])cometConfigurations.toArray(new 
CometConfiguration[0]);
-    }
-    
-    public CometOperation[] getRegisteredOps() {
-        return (CometOperation[])cometOperations.toArray(new 
CometOperation[0]);
-    }
-    
     public String toString() {
         StringBuffer buf = new StringBuffer("CometEventImpl[");
         buf.append(super.toString());
@@ -207,25 +154,6 @@
         buf.append(" SubType:");
         buf.append(getEventSubType());
         return buf.toString();
-    }
-
-    protected void setWorkerThread() {
-        threadCheck.set(threadCheckHolder);
-    }
-    
-    protected void unsetWorkerThread() {
-        threadCheck.set(null);
-    }
-
-    protected void checkWorkerThread() throws IllegalStateException {
-        //throw exception if not on worker thread
-        if ( !(threadCheck.get() == threadCheckHolder) ) 
-            throw new IllegalStateException("The operation can only be 
performed when invoked by a Tomcat worker thread.");
-    }
-    
-    //inner class used to keep track if the current thread is a worker thread.
-    private static class WorkerThreadCheck extends ThreadLocal {
-        
     }
 
 }

Modified: 
tomcat/sandbox/comet/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/connector/CoyoteAdapter.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/catalina/connector/CoyoteAdapter.java 
Tue May 29 04:24:13 2007
@@ -119,11 +119,8 @@
             
             boolean error = false;
             boolean read = false;
-            CometEvent event = request.getEvent();
             try {
-                if ( event!=null && (event instanceof CometEventImpl)) 
-                    ((CometEventImpl)event).setWorkerThread();
-                if (status == SocketStatus.OPEN) {
+                if (status == SocketStatus.OPEN_READ) {
                     if (response.isClosed()) {
                         // The event has been closed asynchronously, so call 
end instead of
                         // read to cleanup the pipeline
@@ -149,6 +146,26 @@
                             request.getEvent().setEventSubType(null);
                         }
                     }
+                } else if (status == SocketStatus.OPEN_WRITE) {
+                    if (response.isClosed()) {
+                        // The event has been closed asynchronously, so call 
end instead of
+                        // read to cleanup the pipeline
+                        
request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                    } else {
+                        
request.getEvent().setEventType(CometEvent.EventType.WRITE);
+                        request.getEvent().setEventSubType(null);
+                    }
+                } else if (status == SocketStatus.OPEN_CALLBACK) {
+                    if (response.isClosed()) {
+                        // The event has been closed asynchronously, so call 
end instead of
+                        // read to cleanup the pipeline
+                        
request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                    } else {
+                        
request.getEvent().setEventType(CometEvent.EventType.CALLBACK);
+                        request.getEvent().setEventSubType(null);
+                    }
                 } else if (status == SocketStatus.DISCONNECT) {
                     
request.getEvent().setEventType(CometEvent.EventType.ERROR);
                     
request.getEvent().setEventSubType(CometEvent.EventSubType.CLIENT_DISCONNECT);
@@ -187,7 +204,7 @@
                 }
                 if (response.isClosed() || !request.isComet()) {
                     res.action(ActionCode.ACTION_COMET_END, null);
-                } else if (!error && read && request.getAvailable()) {
+                } else if (!error && read && request.isReadable()) {
                     // If this was a read and not all bytes have been read, or 
if no data
                     // was read from the connector, then it is an error
                     error = true;
@@ -201,9 +218,6 @@
                 error = true;
                 return false;
             } finally {
-                if ( event!=null && (event instanceof CometEventImpl)) 
-                    ((CometEventImpl)event).unsetWorkerThread();
-
                 req.getRequestProcessor().setWorkerThreadName(null);
                 // Recycle the wrapper request and response
                 if (error || response.isClosed() || !request.isComet()) {
@@ -256,25 +270,21 @@
         }
 
         boolean comet = false;
-        CometEvent event = null;
         try {
 
             // Parse and set Catalina and configuration specific 
             // request parameters
             
req.getRequestProcessor().setWorkerThreadName(Thread.currentThread().getName());
             if (postParseRequest(req, request, res, response)) {
-                event = request.getEvent();
-                if ( event!=null && (event instanceof CometEventImpl)) 
-                    ((CometEventImpl)event).setWorkerThread();
 
                 // Calling the container
                 
connector.getContainer().getPipeline().getFirst().invoke(request, response);
 
                 if (request.isComet()) {
                     if (!response.isClosed() && !response.isError()) {
-                        if (request.getAvailable()) {
+                        if (request.isReadable()) {
                             // Invoke a read event right away if there are 
available bytes
-                            if (event(req, res, SocketStatus.OPEN)) {
+                            if (event(req, res, SocketStatus.OPEN_READ)) {
                                 comet = true;
                                 res.action(ActionCode.ACTION_COMET_BEGIN, 
null);
                             }
@@ -301,9 +311,6 @@
         } catch (Throwable t) {
             log.error(sm.getString("coyoteAdapter.service"), t);
         } finally {
-            if ( event!=null && (event instanceof CometEventImpl)) 
-                ((CometEventImpl)event).unsetWorkerThread();
-
             req.getRequestProcessor().setWorkerThreadName(null);
             // Recycle the wrapper request and response
             if (!comet) {

Modified: 
tomcat/sandbox/comet/java/org/apache/catalina/connector/OutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/connector/OutputBuffer.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/catalina/connector/OutputBuffer.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/catalina/connector/OutputBuffer.java 
Tue May 29 04:24:13 2007
@@ -323,6 +323,14 @@
 
     }
 
+    
+    /**
+     * Return the amount of bytes written by the lower layer.
+     */
+    protected int lastWrite() {
+        return coyoteResponse.getLastWrite();
+    }
+    
 
     // ------------------------------------------------- Bytes Handling Methods
 

Modified: tomcat/sandbox/comet/java/org/apache/catalina/connector/Request.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/connector/Request.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/catalina/connector/Request.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/catalina/connector/Request.java Tue 
May 29 04:24:13 2007
@@ -2252,16 +2252,45 @@
     /**
      * Return true if bytes are available.
      */
-    public boolean getAvailable() {
+    public boolean isReadable() {
         return (inputBuffer.available() > 0);
     }
 
     
-    // ------------------------------------------------------ Protected Methods
+    /**
+     * Set connection timeout.
+     */
+    public void setTimeout(int timeout) {
+        coyoteRequest.action(ActionCode.ACTION_COMET_TIMEOUT, new 
Integer(timeout));
+    }
+    
+    
+    /**
+     * Configure notifications that will be recieved.
+     * 
+     * @param read if true, read events will be sent to the servlet 
+     * @param write if true, the connection will be placed in non blocking 
mode, and write notifications
+     *        may be requested by using the sendNotify method
+     */
+    public void configure(boolean read, boolean write) {
+        coyoteRequest.action(ActionCode.ACTION_COMET_READ_NOTIFICATIONS, 
Boolean.valueOf(read));
+        coyoteRequest.action(ActionCode.ACTION_COMET_WRITE_NOTIFICATIONS, 
Boolean.valueOf(write));
+    }
 
-    protected void action(ActionCode actionCode, Object param) {
-        coyoteRequest.action(actionCode,param);
+    /**
+     * Send a notify event to the servlet.
+     * 
+     * @param write with the value true should be called when isWriteable 
becomes false, to request notification
+     *        when the connection becomes available for writing again; with 
the value false, a notify event 
+     *        will be sent to the servlet
+     */
+    public void callback(boolean write) {
+        coyoteRequest.action(ActionCode.ACTION_COMET_CALLBACK, 
Boolean.valueOf(write));
     }
+    
+    
+    // ------------------------------------------------------ Protected Methods
+
 
     protected Session doGetSession(boolean create) {
 

Modified: tomcat/sandbox/comet/java/org/apache/catalina/connector/Response.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/catalina/connector/Response.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/catalina/connector/Response.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/catalina/connector/Response.java Tue 
May 29 04:24:13 2007
@@ -529,6 +529,14 @@
     }
 
 
+    /**
+     * Return true if bytes are available.
+     */
+    public boolean isWriteable() {
+        return (outputBuffer.lastWrite() > 0);
+    }
+
+    
     // ------------------------------------------------ ServletResponse Methods
 
 

Modified: tomcat/sandbox/comet/java/org/apache/coyote/ActionCode.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/coyote/ActionCode.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/coyote/ActionCode.java (original)
+++ tomcat/sandbox/comet/java/org/apache/coyote/ActionCode.java Tue May 29 
04:24:13 2007
@@ -159,19 +159,18 @@
     /**
      * Configure a Comet connection
      */
-    public static final ActionCode ACTION_COMET_CONFIGURE = new ActionCode(25);
+    public static final ActionCode ACTION_COMET_CALLBACK = new ActionCode(25);
     
     /**
-     * Register notifications for events for a certain comet connection
+     * Register notifications for read events
      */
-    public static final ActionCode ACTION_COMET_REGISTER = new ActionCode(26);
+    public static final ActionCode ACTION_COMET_READ_NOTIFICATIONS = new 
ActionCode(26);
     
     /**
-     * Unregister for notifications for a comet connection
+     * Register notifications for write events
      */
-    public static final ActionCode ACTION_COMET_UNREGISTER = new 
ActionCode(27);
+    public static final ActionCode ACTION_COMET_WRITE_NOTIFICATIONS = new 
ActionCode(27);
     
-
 
     // ----------------------------------------------------------- Constructors
     int code;

Modified: tomcat/sandbox/comet/java/org/apache/coyote/Response.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/coyote/Response.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/coyote/Response.java (original)
+++ tomcat/sandbox/comet/java/org/apache/coyote/Response.java Tue May 29 
04:24:13 2007
@@ -124,6 +124,8 @@
 
     protected Request req;
 
+    protected int lastWrite = 1;
+    
     // ------------------------------------------------------------- Properties
 
     public Request getRequest() {
@@ -188,6 +190,16 @@
     // -------------------- State --------------------
 
 
+    public int getLastWrite() {
+        return lastWrite;
+    }
+
+    
+    public void setLastWrite(int lastWrite) {
+        this.lastWrite = lastWrite;
+    }
+
+
     public int getStatus() {
         return status;
     }
@@ -579,6 +591,7 @@
         headers.clear();
 
         // update counters
+        lastWrite = 1;
         bytesWritten=0;
     }
 

Modified: tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/tomcat/util/net/AprEndpoint.java Tue 
May 29 04:24:13 2007
@@ -1301,7 +1301,7 @@
                             // Check for failed sockets and hand this socket 
off to a worker
                             if (((desc[n*2] & Poll.APR_POLLHUP) == 
Poll.APR_POLLHUP)
                                     || ((desc[n*2] & Poll.APR_POLLERR) == 
Poll.APR_POLLERR)
-                                    || (comet && (!processSocket(desc[n*2+1], 
SocketStatus.OPEN))) 
+                                    || (comet && (!processSocket(desc[n*2+1], 
SocketStatus.OPEN_READ))) 
                                     || (!comet && 
(!processSocket(desc[n*2+1])))) {
                                 // Close socket and clear pool
                                 if (comet) {

Modified: tomcat/sandbox/comet/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/tomcat/util/net/NioEndpoint.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/tomcat/util/net/NioEndpoint.java Tue 
May 29 04:24:13 2007
@@ -1492,7 +1492,7 @@
                             //check if thread is available
                             if ( isWorkerAvailable() ) {
                                 unreg(sk, attachment, sk.readyOps());
-                                if (!processSocket(channel, SocketStatus.OPEN))
+                                if (!processSocket(channel, 
SocketStatus.OPEN_READ))
                                     processSocket(channel, 
SocketStatus.DISCONNECT);
                             } else {
                                 result = false;

Modified: tomcat/sandbox/comet/java/org/apache/tomcat/util/net/SocketStatus.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/comet/java/org/apache/tomcat/util/net/SocketStatus.java?view=diff&rev=542491&r1=542490&r2=542491
==============================================================================
--- tomcat/sandbox/comet/java/org/apache/tomcat/util/net/SocketStatus.java 
(original)
+++ tomcat/sandbox/comet/java/org/apache/tomcat/util/net/SocketStatus.java Tue 
May 29 04:24:13 2007
@@ -23,5 +23,5 @@
  * @author remm
  */
 public enum SocketStatus {
-    OPEN, STOP, TIMEOUT, DISCONNECT, ERROR
+    OPEN_READ, OPEN_WRITE, OPEN_CALLBACK, STOP, TIMEOUT, DISCONNECT, ERROR
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to