Mercurial > cpython-lru_cache-weakref
changeset 68219:f2046dfca731
Issue 11351 - apply patch by Steffen Daode Nurpmeso which should fix TestSendfile.test_headers failure on OSX.
| author | Giampaolo Rodolà <g.rodola@gmail.com> |
|---|---|
| date | Thu, 03 Mar 2011 16:10:51 +0000 |
| parents | ddc0bb6a7b7c |
| children | b5281f5fade4 |
| files | Modules/posixmodule.c |
| diffstat | 1 files changed, 31 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/Modules/posixmodule.c Thu Mar 03 14:10:58 2011 +0000 +++ b/Modules/posixmodule.c Thu Mar 03 16:10:51 2011 +0000 @@ -5867,36 +5867,42 @@ #ifdef HAVE_SENDFILE #if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__APPLE__) -static int +static Py_ssize_t iov_setup(struct iovec **iov, Py_buffer **buf, PyObject *seq, int cnt, int type) { int i, j; + Py_ssize_t blen, total = 0; + *iov = PyMem_New(struct iovec, cnt); if (*iov == NULL) { PyErr_NoMemory(); - return 0; - } + return total; + } + *buf = PyMem_New(Py_buffer, cnt); if (*buf == NULL) { PyMem_Del(*iov); PyErr_NoMemory(); - return 0; + return total; } for (i = 0; i < cnt; i++) { - if (PyObject_GetBuffer(PySequence_GetItem(seq, i), &(*buf)[i], - type) == -1) { + if (PyObject_GetBuffer(PySequence_GetItem(seq, i), + &(*buf)[i], type) == -1) { PyMem_Del(*iov); for (j = 0; j < i; j++) { PyBuffer_Release(&(*buf)[j]); - } + } PyMem_Del(*buf); - return 0; + total = 0; + return total; } (*iov)[i].iov_base = (*buf)[i].buf; - (*iov)[i].iov_len = (*buf)[i].len; - } - return 1; + blen = (*buf)[i].len; + (*iov)[i].iov_len = blen; + total += blen; + } + return total; } static void @@ -5954,10 +5960,15 @@ "sendfile() headers must be a sequence or None"); return NULL; } else { + Py_ssize_t i = 0; /* Avoid uninitialized warning */ sf.hdr_cnt = PySequence_Size(headers); - if (sf.hdr_cnt > 0 && !iov_setup(&(sf.headers), &hbuf, - headers, sf.hdr_cnt, PyBUF_SIMPLE)) + if (sf.hdr_cnt > 0 && + !(i = iov_setup(&(sf.headers), &hbuf, + headers, sf.hdr_cnt, PyBUF_SIMPLE))) return NULL; +#ifdef __APPLE__ + sbytes += i; +#endif } } if (trailers != NULL) { @@ -5966,10 +5977,15 @@ "sendfile() trailers must be a sequence or None"); return NULL; } else { + Py_ssize_t i = 0; /* Avoid uninitialized warning */ sf.trl_cnt = PySequence_Size(trailers); - if (sf.trl_cnt > 0 && !iov_setup(&(sf.trailers), &tbuf, - trailers, sf.trl_cnt, PyBUF_SIMPLE)) + if (sf.trl_cnt > 0 && + !(i = iov_setup(&(sf.trailers), &tbuf, + trailers, sf.trl_cnt, PyBUF_SIMPLE))) return NULL; +#ifdef __APPLE__ + sbytes += i; +#endif } }
