stoddard    00/02/04 11:22:57

  Modified:    src/lib/apr/network_io/win32 sendrecv.c
  Log:
  Very minor performance tweak. Do not copy header/trailer buffer if there is
  just one.
  
  Revision  Changes    Path
  1.9       +28 -15    apache-2.0/src/lib/apr/network_io/win32/sendrecv.c
  
  Index: sendrecv.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sendrecv.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- sendrecv.c        2000/02/04 19:05:22     1.8
  +++ sendrecv.c        2000/02/04 19:22:55     1.9
  @@ -183,30 +183,43 @@
       memset(&tfb, '\0', sizeof (tfb));
       if (hdtr && hdtr->numheaders) {
           ptfb = &tfb;
  -        for (i = 0; i < hdtr->numheaders; i++) {
  -            tfb.HeadLength += hdtr->headers[i].iov_len;
  +        if (hdtr->numheaders == 1) {
  +            ptfb->Head = hdtr->headers[0].iov_base;
  +            ptfb->HeadLength = hdtr->headers[0].iov_len;
           }
  +        else {
  +            /* Need to collapse all the header fragments into one buffer */
  +            for (i = 0; i < hdtr->numheaders; i++) {
  +                ptfb->HeadLength += hdtr->headers[i].iov_len;
  +            }
  +            ptfb->Head = ap_palloc(sock->cntxt, ptfb->HeadLength); /* Should 
this be a malloc? */
   
  -        tfb.Head = ap_palloc(sock->cntxt, tfb.HeadLength); /* Should this be 
a malloc? */
  -
  -        for (i = 0; i < hdtr->numheaders; i++) {
  -            memcpy((char*)tfb.Head + ptr, hdtr->headers[i].iov_base,
  -                   hdtr->headers[i].iov_len);
  -            ptr += hdtr->headers[i].iov_len;
  +            for (i = 0; i < hdtr->numheaders; i++) {
  +                memcpy((char*)ptfb->Head + ptr, hdtr->headers[i].iov_base,
  +                       hdtr->headers[i].iov_len);
  +                ptr += hdtr->headers[i].iov_len;
  +            }
           }
       }
       if (hdtr && hdtr->numtrailers) {
           ptfb = &tfb;
  -        for (i = 0; i < hdtr->numtrailers; i++) {
  -            tfb.TailLength += hdtr->headers[i].iov_len;
  +        if (hdtr->numtrailers == 1) {
  +            ptfb->Tail = hdtr->trailers[0].iov_base;
  +            ptfb->TailLength = hdtr->trailers[0].iov_len;
           }
  +        else {
  +            /* Need to collapse all the trailer fragments into one buffer */
  +            for (i = 0; i < hdtr->numtrailers; i++) {
  +                ptfb->TailLength += hdtr->headers[i].iov_len;
  +            }
   
  -        tfb.Tail = ap_palloc(sock->cntxt, tfb.TailLength); /* Should this be 
a malloc? */
  +            ptfb->Tail = ap_palloc(sock->cntxt, ptfb->TailLength); /* Should 
this be a malloc? */
   
  -        for (i = 0; i < hdtr->numtrailers; i++) {
  -            memcpy((char*)tfb.Tail + ptr, hdtr->trailers[i].iov_base,
  -                   hdtr->trailers[i].iov_len);
  -            ptr += hdtr->trailers[i].iov_len;
  +            for (i = 0; i < hdtr->numtrailers; i++) {
  +                memcpy((char*)ptfb->Tail + ptr, hdtr->trailers[i].iov_base,
  +                       hdtr->trailers[i].iov_len);
  +                ptr += hdtr->trailers[i].iov_len;
  +            }
           }
       }
       /* Initialize the overlapped structure */
  
  
  

Reply via email to