From 902d9c89abb2cf9bed688590b2276a19fcf4d35a Mon Sep 17 00:00:00 2001 From: Jason Madden Date: Wed, 13 Nov 2019 07:08:26 -0600 Subject: [PATCH] Capture os.sendfile before patching in gevent and eventlet workers. Fixes #1925 and fixes #2170. --- gunicorn/workers/geventlet.py | 4 ++-- gunicorn/workers/ggevent.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index 968868a3..e4b425cd 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -26,10 +26,10 @@ import greenlet from gunicorn.workers.base_async import AsyncWorker -def _eventlet_sendfile(fdout, fdin, offset, nbytes): +def _eventlet_sendfile(fdout, fdin, offset, nbytes, _os_sendfile=os.sendfile): while True: try: - return os.sendfile(fdout, fdin, offset, nbytes) + return _os_sendfile(fdout, fdin, offset, nbytes) except OSError as e: if e.args[0] == errno.EAGAIN: trampoline(fdout, write=True) diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 5dfec5e1..85418035 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -30,10 +30,10 @@ from gunicorn.workers.base_async import AsyncWorker VERSION = "gevent/%s gunicorn/%s" % (gevent.__version__, gunicorn.__version__) -def _gevent_sendfile(fdout, fdin, offset, nbytes): +def _gevent_sendfile(fdout, fdin, offset, nbytes, _os_sendfile=os.sendfile): while True: try: - return os.sendfile(fdout, fdin, offset, nbytes) + return _os_sendfile(fdout, fdin, offset, nbytes) except OSError as e: if e.args[0] == errno.EAGAIN: socket.wait_write(fdout)