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 */