-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Comparing changes
Open a pull request
base repository: benoitc/gunicorn
base: 25.0.1
head repository: benoitc/gunicorn
compare: 25.0.2
- 11 commits
- 210 files changed
- 1 contributor
Commits on Feb 2, 2026
-
docs: replace sponsors section with expanded support section
Update README.md and docs homepage with detailed support messaging including sponsorship benefits and corporate contact information.
Configuration menu - View commit details
-
Copy full SHA for a7e14e1 - Browse repository at this point
Copy the full SHA a7e14e1View commit details -
Configuration menu - View commit details
-
Copy full SHA for 3373e4b - Browse repository at this point
Copy the full SHA 3373e4bView commit details
Commits on Feb 3, 2026
-
fix: lazy import dirty module for gevent compatibility
Closes #3482 The dirty module (which uses asyncio and concurrent.futures) was being imported at gunicorn startup via gunicorn.arbiter. This caused concurrent.futures to be imported before user code could call gevent.monkey.patch_all(), breaking gevent's monkey-patching. Changes: - gunicorn/arbiter.py: Import DirtyArbiter and set_dirty_socket_path lazily inside spawn_dirty_arbiter() instead of at module level - gunicorn/dirty/worker.py: Import ThreadPoolExecutor lazily inside run() method instead of at module level - Add tests/workers/test_gevent_import_order.py with 5 tests verifying: - concurrent.futures is NOT imported when gunicorn.arbiter loads - gevent patching works correctly with gunicorn - Reproduces the exact scenario from the bug report gist This ensures gevent's monkey.patch_all() can run before concurrent.futures is imported, allowing proper patching of threading primitives.
Configuration menu - View commit details
-
Copy full SHA for b19c648 - Browse repository at this point
Copy the full SHA b19c648View commit details -
Merge pull request #3483 from benoitc/fix/gevent-concurrent-futures-i…
…mport fix: lazy import dirty module for gevent compatibility
Configuration menu - View commit details
-
Copy full SHA for 15cadf8 - Browse repository at this point
Copy the full SHA 15cadf8View commit details -
fix: graceful disconnect handling for ASGI worker
Closes #3484 When a client disconnects during an ASGI request, the worker now: 1. Sends http.disconnect message to the app's receive queue 2. Allows a configurable grace period for cleanup (default: 3 seconds) 3. Only cancels the task after the grace period expires This follows the ASGI HTTP Connection Scope spec which defines http.disconnect as the message apps should receive when clients disconnect: https://asgi.readthedocs.io/en/latest/specs/www.html#disconnect-receive-event The grace period prevents CancelledError from propagating to async database operations, allowing SQLAlchemy and other async DB libraries to properly reset their connection pools. New config option: --asgi-disconnect-grace-period (default: 3 seconds)
Configuration menu - View commit details
-
Copy full SHA for 3bf718e - Browse repository at this point
Copy the full SHA 3bf718eView commit details -
Merge pull request #3485 from benoitc/fix/asgi-graceful-disconnect
fix: graceful disconnect handling for ASGI worker
Configuration menu - View commit details
-
Copy full SHA for 866e88c - Browse repository at this point
Copy the full SHA 866e88cView commit details
Commits on Feb 6, 2026
-
fix: resolve ASGI concurrent request failures through nginx proxy
- Fix nginx config to use keepalive with upstream (was sending Connection: close which caused premature connection closure) - Add _safe_write() to handle socket errors (EPIPE, ECONNRESET, ENOTCONN) gracefully when client disconnects - Fix ASGI scope server/client to always be 2-tuples for IPv6 compatibility (IPv6 sockets return 4-tuples) - Add write_eof() before close() to ensure buffered data is flushed - Bind to [::] for dual-stack IPv4/IPv6 support in test containers
Configuration menu - View commit details
-
Copy full SHA for e780508 - Browse repository at this point
Copy the full SHA e780508View commit details -
refactor: extract _normalize_sockaddr utility function
Consolidate the repeated pattern for normalizing socket addresses to ASGI-compatible (host, port) tuples into a single utility function.
Configuration menu - View commit details
-
Copy full SHA for 026167a - Browse repository at this point
Copy the full SHA 026167aView commit details -
- Bump version to 25.0.2 - Update copyright year to 2026 in LICENSE and NOTICE - Add license headers to all Python source files - Add changelog entry for 25.0.2
Configuration menu - View commit details
-
Copy full SHA for 95b7ffe - Browse repository at this point
Copy the full SHA 95b7ffeView commit details -
Configuration menu - View commit details
-
Copy full SHA for 2c0f959 - Browse repository at this point
Copy the full SHA 2c0f959View commit details -
1
Configuration menu - View commit details
-
Copy full SHA for 9508df6 - Browse repository at this point
Copy the full SHA 9508df6View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff 25.0.1...25.0.2