tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r...@apache.org
Subject cvs commit: jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net AprEndpoint.java
Date Wed, 20 Apr 2005 00:13:25 GMT
remm        2005/04/19 17:13:25

  Modified:    util/java/org/apache/tomcat/util/net AprEndpoint.java
  Log:
  - Sendfile fixes (does not work yet, as the poller does really weird things).
  
  Revision  Changes    Path
  1.13      +15 -17    jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/AprEndpoint.java
  
  Index: AprEndpoint.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/net/AprEndpoint.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AprEndpoint.java	19 Apr 2005 18:56:58 -0000	1.12
  +++ AprEndpoint.java	20 Apr 2005 00:13:24 -0000	1.13
  @@ -988,7 +988,7 @@
       /**
        * SendfileData class.
        */
  -    public class SendfileData {
  +    public static class SendfileData {
           // File
           public String fileName;
           public long fd;
  @@ -1015,7 +1015,6 @@
           protected long pool = 0;
           protected long[] desc;
           protected HashMap sendfileData;
  -        protected SendfileData[] state;
   
           protected void init() {
               pool = Pool.create(serverSockPool);
  @@ -1040,7 +1039,6 @@
               }
               desc = new long[sendfileSize * 4];
               sendfileData = new HashMap(sendfileSize);
  -            state = new SendfileData[sendfileSize];
           }
   
           protected void destroy() {
  @@ -1117,41 +1115,41 @@
                       int rv = Poll.poll(sendfilePollset, pollTime, desc, false);
                       if (rv > 0) {
                           for (int n = 0; n < rv; n++) {
  +                            // Get the sendfile state
  +                            SendfileData state =
  +                                (SendfileData) sendfileData.get(new Long(desc[n*4+1]));
                               // Problem events
                               if (((desc[n*4] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP)
                                       || ((desc[n*4] & Poll.APR_POLLERR) == Poll.APR_POLLERR))
{
                                   // Close socket and clear pool
                                   remove(desc[n*4+1]);
                                   // Destroy file descriptor pool, which should close the
file
  -                                Pool.destroy(state[n].fdpool);
  +                                Pool.destroy(state.fdpool);
                                   // Close the socket, as the reponse would be incomplete
  -                                Pool.destroy(state[n].pool);
  +                                Pool.destroy(state.pool);
                                   continue;
                               }
  -                            // Get the sendfile state
  -                            state[n] =
  -                                (SendfileData) sendfileData.get(new Long(desc[n*4+1]));
                               // Write some data using sendfile
  -                            int nw = Socket.sendfilet(desc[n*4+1], state[n].fd,
  -                                                      null, null, state[n].pos,
  -                                                      (int) (state[n].end - state[n].pos),
0, 0);
  +                            int nw = Socket.sendfilet(desc[n*4+1], state.fd,
  +                                                      null, null, state.pos,
  +                                                      (int) (state.end - state.pos), 0,
0);
                               if (nw < 0) {
                                   // Close socket and clear pool
                                   remove(desc[n*4+1]);
                                   // Destroy file descriptor pool, which should close the
file
  -                                Pool.destroy(state[n].fdpool);
  +                                Pool.destroy(state.fdpool);
                                   // Close the socket, as the reponse would be incomplete
  -                                Pool.destroy(state[n].pool);
  +                                Pool.destroy(state.pool);
                                   continue;
                               }
  -                            state[n].pos = state[n].pos + nw;
  -                            if (state[n].pos >= state[n].end) {
  +                            state.pos = state.pos + nw;
  +                            if (state.pos >= state.end) {
                                   remove(desc[n*4+1]);
                                   // Destroy file descriptor pool, which should close the
file
  -                                Pool.destroy(state[n].fdpool);
  +                                Pool.destroy(state.fdpool);
                                   // If all done hand this socket off to a worker for
                                   // processing of further requests
  -                                getWorkerThread().assign(desc[n*4+1], state[n].pool);
  +                                getWorkerThread().assign(desc[n*4+1], state.pool);
                               }
                           }
                       } else if (rv < 0) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org


Mime
View raw message