diff options
author | Evgeny Kotkov <kotkov@apache.org> | 2022-10-20 06:14:02 +0000 |
---|---|---|
committer | Evgeny Kotkov <kotkov@apache.org> | 2022-10-20 06:14:02 +0000 |
commit | 7b07b731d0fa62dc88ec8b69650dca6d888ea2a9 (patch) | |
tree | 1f2b0625b2407ddae681835151bd9baa3f59eb35 | |
parent | f039abc0c1a70394f8c0595ab3bc8e9aec9da325 (diff) | |
download | apr-7b07b731d0fa62dc88ec8b69650dca6d888ea2a9.tar.gz |
Revert r1904674 that merged r1902312 from trunk
(apr_socket_sendv: WIN32: Limit the number of WSABUFs allocated for a single call).
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.7.x@1904717 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | network_io/win32/sendrecv.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/network_io/win32/sendrecv.c b/network_io/win32/sendrecv.c index 5fbe41a9a..3fa0c8dda 100644 --- a/network_io/win32/sendrecv.c +++ b/network_io/win32/sendrecv.c @@ -34,10 +34,7 @@ * than 8193 bytes. */ #define MAX_SEGMENT_SIZE 65536 - -/* Maximum number of WSABUF allocated for a single apr_socket_sendv() */ #define WSABUF_ON_STACK 50 -#define WSABUF_ON_HEAP 500 APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len) @@ -104,26 +101,18 @@ APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock, apr_status_t rc = APR_SUCCESS; apr_ssize_t rv; apr_size_t cur_len; - apr_size_t nvec = 0; - apr_size_t n; - int i; + apr_int32_t nvec = 0; + int i, j = 0; DWORD dwBytes = 0; WSABUF *pWsaBuf; for (i = 0; i < in_vec; i++) { cur_len = vec[i].iov_len; - + nvec++; while (cur_len > APR_DWORD_MAX) { - if (nvec >= WSABUF_ON_HEAP) { - break; - } nvec++; cur_len -= APR_DWORD_MAX; } - if (nvec >= WSABUF_ON_HEAP) { - break; - } - nvec++; } pWsaBuf = (nvec <= WSABUF_ON_STACK) ? _alloca(sizeof(WSABUF) * (nvec)) @@ -131,23 +120,25 @@ APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock, if (!pWsaBuf) return APR_ENOMEM; - for (n = i = 0; n < nvec; i++) { + for (i = 0; i < in_vec; i++) { char * base = vec[i].iov_base; cur_len = vec[i].iov_len; - + do { if (cur_len > APR_DWORD_MAX) { - pWsaBuf[n].buf = base; - pWsaBuf[n].len = APR_DWORD_MAX; + pWsaBuf[j].buf = base; + pWsaBuf[j].len = APR_DWORD_MAX; cur_len -= APR_DWORD_MAX; base += APR_DWORD_MAX; } else { - pWsaBuf[n].buf = base; - pWsaBuf[n].len = (DWORD)cur_len; + pWsaBuf[j].buf = base; + pWsaBuf[j].len = (DWORD)cur_len; cur_len = 0; } - } while (++n < nvec && cur_len > 0); + j++; + + } while (cur_len > 0); } #ifndef _WIN32_WCE rv = WSASend(sock->socketdes, pWsaBuf, nvec, &dwBytes, 0, NULL, NULL); |