rbb         99/06/14 05:43:13

  Modified:    apr/network_io/unix networkio.h poll.c
               apr/test server.c
  Log:
  The rest of the changes for the poll api change.  These are not thoroughly
  tested, but they work in the bit of testing I have done, and they hide more
  of the internal details, so those systems using select don't have to deal with
  as much.
  
  Revision  Changes    Path
  1.10      +1 -0      apache-apr/apr/network_io/unix/networkio.h
  
  Index: networkio.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/network_io/unix/networkio.h,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- networkio.h       1999/05/21 19:53:36     1.9
  +++ networkio.h       1999/06/14 12:43:10     1.10
  @@ -73,6 +73,7 @@
       struct socket_t *sock;
       ap_int16_t events;
       ap_int16_t revents;
  +    int curpos;
   };
   
   ap_int16_t get_event(ap_int16_t);
  
  
  
  1.12      +23 -6     apache-apr/apr/network_io/unix/poll.c
  
  Index: poll.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/network_io/unix/poll.c,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- poll.c    1999/06/02 18:44:53     1.11
  +++ poll.c    1999/06/14 12:43:10     1.12
  @@ -68,6 +68,7 @@
           return APR_ENOMEM;
       }
       (*new)->cntxt = cont;
  +    (*new)->curpos = 0;
       return APR_SUCCESS;
   }
   
  @@ -112,11 +113,19 @@
   }
   
   ap_status_t ap_add_poll_socket(struct pollfd_t *aprset, 
  -                            struct socket_t *sock, ap_int16_t event, 
  -                               ap_int32_t pos)
  +                            struct socket_t *sock, ap_int16_t event)
   {
  -    aprset[pos].sock = sock;
  -    aprset[pos].events = get_event(event);
  +    int i = 0;
  +    
  +    while (i < aprset->curpos && aprset[i].sock->socketdes != 
sock->socketdes) {
  +        i++;
  +    }
  +    if (i >= aprset->curpos) {
  +        aprset->curpos++;
  +    } 
  +    aprset[i].sock = sock;
  +    aprset[i].events = get_event(event);
  +
       return APR_SUCCESS;
   }
   
  @@ -151,9 +160,17 @@
       return APR_SUCCESS;
   }
   
  -ap_status_t ap_get_revents(struct pollfd_t *aprset, ap_int32_t pos, 
ap_int16_t *event)
  +ap_status_t ap_get_revents(struct pollfd_t *aprset, struct socket_t *sock, 
ap_int16_t *event)
   {
  -    (*event) = aprset[pos].revents;
  +    int i = 0;
  +    
  +    while (i < aprset->curpos && aprset[i].sock->socketdes != 
sock->socketdes) {
  +        i++;
  +    }
  +    if (i >= aprset->curpos) {
  +        return APR_INVALSOCK;
  +    } 
  +    (*event) = aprset[i].revents;
       return APR_SUCCESS;
   }
    
  
  
  
  1.8       +1 -1      apache-apr/apr/test/server.c
  
  Index: server.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/server.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- server.c  1999/05/25 17:03:53     1.7
  +++ server.c  1999/06/14 12:43:12     1.8
  @@ -122,7 +122,7 @@
   
       fprintf(stdout, "\tServer:  Setting up socket for polling.......");
       ap_setup_poll(context, 1, &sdset);
  -    ap_add_poll_socket(sdset, sock, APR_POLLIN, 0);
  +    ap_add_poll_socket(sdset, sock, APR_POLLIN);
       fprintf(stdout, "OK\n");
       
       fprintf(stdout, "\tServer:  Beginning to poll for socket.......");
  
  
  

Reply via email to