cs01 / cs01/gdbgui

Eventlet is deprecated and broken with trio

Open
#515 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
10.4k
Forks
521
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**

If I have `eventlet` and `trio` installed then `gdbgui` breaks with:
```
Traceback (most recent call last):
File "/usr/bin/gdbgui", line 33, in
sys.exit(load_entry_point('gdbgui==0.15.3.0', 'console_scripts', 'gdbgui')())
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib/python3.14/site-packages/gdbgui/cli.py", line 249, in main
run_server(
~~~~~~~~~~^
app=app,
^^^^^^^^
...<7 lines>...
certificate=args.cert,
^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3.14/site-packages/gdbgui/server/server.py", line 68, in run_server
socketio.init_app(app)
~~~~~~~~~~~~~~~~~^^^^^
File "/usr/lib/python3.14/site-packages/flask_socketio/__init__.py", line 257, in init_app
self.server = socketio.Server(**self.server_options)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/socketio/base_server.py", line 34, in __init__
self.eio = self._engineio_server_class()(**engineio_options)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/engineio/base_server.py", line 83, in __init__
self._async = importlib.import_module(
~~~~~~~~~~~~~~~~~~~~~~~^
'engineio.async_drivers.' + mode)._async
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/importlib/__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1406, in _gcd_import
File "", line 1371, in _find_and_load
File "", line 1342, in _find_and_load_unlocked
File "", line 938, in _load_unlocked
File "", line 759, in exec_module
File "", line 491, in _call_with_frames_removed
File "/usr/lib/python3.14/site-packages/engineio/async_drivers/eventlet.py", line 1, in
from eventlet.green.threading import Event
File "/usr/lib/python3.14/site-packages/eventlet/__init__.py", line 6, in
from eventlet import convenience
File "/usr/lib/python3.14/site-packages/eventlet/convenience.py", line 7, in
from eventlet.green import socket
File "/usr/lib/python3.14/site-packages/eventlet/green/socket.py", line 21, in
from eventlet.support import greendns
File "/usr/lib/python3.14/site-packages/eventlet/support/greendns.py", line 78, in
setattr(dns, pkg, import_patched('dns.' + pkg))
~~~~~~~~~~~~~~^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/eventlet/support/greendns.py", line 60, in import_patched
return patcher.import_patched(module_name, **modules)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/eventlet/patcher.py", line 138, in import_patched
return inject(
module_name, None, *additional_modules + tuple(kw_additional_modules.items())
)
File "/usr/lib/python3.14/site-packages/eventlet/patcher.py", line 115, in inject
module = __import__(module_name, {}, {}, module_name.split(".")[:-1])
File "/usr/lib/python3.14/site-packages/dns/asyncquery.py", line 34, in
import dns.quic
File "/usr/lib/python3.14/site-packages/dns/quic/__init__.py", line 40, in
import trio
File "/usr/lib/python3.14/site-packages/trio/__init__.py", line 25, in
from . import abc, from_thread, lowlevel, socket, to_thread
File "/usr/lib/python3.14/site-packages/trio/socket.py", line 16, in
from . import _socket
File "/usr/lib/python3.14/site-packages/trio/_socket.py", line 546, in
class SocketType:
...<221 lines>...
raise NotImplementedError
File "/usr/lib/python3.14/site-packages/trio/_socket.py", line 759, in SocketType
@_wraps(_stdlib_socket.socket.sendmsg, assigned=(), updated=())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'GreenSocket' has no attribute 'sendmsg'
```

**To Reproduce**
Steps to reproduce the behavior:
1. Have `engineio 4.13.3`, `trio 0.34.0` and `eventlet 0.41.0`
2. Run `gdbgui`

**Expected behavior**
No error :)

**Please complete the following information:**
* OS: Arch Linux
* gdbgui version (`gdbgui -v`): 0.15.3.0
* gdb version (`gdb -v`): 17.2
* browser [e.g. chrome, safari]: firefox

**Additional context**

If I remove `eventlet` or `trio` then it seems to be working fine.
Also this seems to be quite common error with eventlet + trio is just broken, see python-trio/trio#3015 eventlet/eventlet#1075 eventlet/eventlet#1045

Without `trio`
```
$ python -c 'import eventlet'
:1: EventletDeprecationWarning:
Eventlet is deprecated. It is currently being maintained in bugfix mode, and
we strongly recommend against using it for new projects.

If you are already using Eventlet, we recommend migrating to a different
framework. For more detail see
https://eventlet.readthedocs.io/en/latest/asyncio/migration.html
```

Contributor guide

Open the contributing guide

Research direction

Start at gdbgui/cli.py where main calls run_server, then inspect gdbgui/server/server.py around socketio.init_app. Reproduce with engineio 4.13.3, trio 0.34.0, and eventlet 0.41.0, and compare behavior when either conflicting package is removed. Done means gdbgui starts successfully with both packages installed without regressing its server behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.