Return-Path: Delivered-To: apache-cvs-archive@hyperreal.org Received: (qmail 3029 invoked by uid 6000); 4 Feb 2000 19:23:10 -0000 Received: (qmail 2892 invoked by uid 2016); 4 Feb 2000 19:23:01 -0000 Delivered-To: apcore-apache-2.0-cvs@apache.org Received: (qmail 2826 invoked by uid 215); 4 Feb 2000 19:22:57 -0000 Date: 4 Feb 2000 19:22:57 -0000 Message-ID: <20000204192257.2825.qmail@hyperreal.org> From: stoddard@hyperreal.org To: apache-2.0-cvs@apache.org Subject: cvs commit: apache-2.0/src/lib/apr/network_io/win32 sendrecv.c Sender: apache-cvs-owner@apache.org Precedence: bulk Reply-To: new-httpd@apache.org 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 */