Skip to content

[Bug]: opening multiple RCC hubs from discovery causes crash #117

Description

@johnysilvermon

MeshChatX version

4.9.0

Release channel

Unsure

Platform

Desktop (Electron)

Operating system

macOS

OS details (if Other)

tahoe 26.6

How did you install MeshChatX?

pip / uv / PyPI

What happened?

I know this is an edge case but still.
There is no way to know how many users are on each RCC hub. So the only way is to connect to them all.

I tried connecting to many by pressing 'add' from 'discovery' over and over, and it crashed.
I restarted, when adding more it crashes again.

PS: would be nice if clicking 'add' didn't take you away from the main screen
PS2: is discovery list capped at 200 hubs?

The log is below.

What did you expect?

no crash :)

Steps to reproduce

Go in RCC hub discovery and keep clicking 'add'. After 2 or 3 fast enough clicks, the error is reproducible.

Logs or error output

[crash_recovery] Unhandled exception in thread 'Thread-12 (run)':

======================================================================
!!! APPLICATION CRASH DETECTED !!!
======================================================================

Error Summary:
  Type:    RuntimeError
  Message: <asyncio.locks.Lock object at 0x10deb7b60 [unlocked, waiters:1]> is bound to a different event loop

System Environment Diagnosis:
- OS: Darwin 25.6.0 (arm64)
- Python: 3.13.5
- Memory: 80.4% used (3212.1 MB available)
- Storage Path: /Users/nongkhaem/.reticulum-meshchatx
  - Disk Space: 80718.9 MB free
- Frontend Assets: /Users/nongkhaem/.local/share/uv/tools/reticulum-meshchatx/lib/python3.13/site-packages/meshchatx/public
  - Frontend Status: Assets verified
- Reticulum Network Stack:
  - Config Directory: /Users/nongkhaem/.reticulum
  - Config File: OK
  - Logs: No RNS log files found in standard locations.
  - Active Interfaces: 1
    > LocalInterface[37428] [Active]

Root Cause Analysis:
  [System Entropy: 0.9776 bits]
  [KL-Divergence: 0.0000 bits]
  [Log Entropy (60s): 0.4395 bits]
  [Error Rate (60s): 9.09%]
  - [45% Probability] Asynchronous Initialization Race Condition
    Reasoning: A component tried to access the asyncio event loop before it was started.

Technical Traceback:
Traceback (most recent call last):
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/threading.py", line 1043, in _bootstrap_inner
    self.run()
    ~~~~~~~~^^
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/threading.py", line 994, in run
    self._target(*self._args, **self._kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 195, in run
    return runner.run(main)
           ~~~~~~~~~~^^^^^^
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/base_events.py", line 725, in run_until_complete
    return future.result()
           ~~~~~~~~~~~~~^^
  File "/Users/nongkhaem/.local/share/uv/tools/reticulum-meshchatx/lib/python3.13/site-packages/meshchatx/meshchat.py", line 3740, in announce_sync_propagation_nodes
    await self.send_config_to_websocket_clients(context=ctx)
  File "/Users/nongkhaem/.local/share/uv/tools/reticulum-meshchatx/lib/python3.13/site-packages/meshchatx/meshchat.py", line 7589, in send_config_to_websocket_clients
    await self.websocket_broadcast(
    ...<4 lines>...
    )
  File "/Users/nongkhaem/.local/share/uv/tools/reticulum-meshchatx/lib/python3.13/site-packages/meshchatx/meshchat.py", line 7476, in websocket_broadcast
    async with self._websocket_broadcast_lock:
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/locks.py", line 14, in __aenter__
    await self.acquire()
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/locks.py", line 105, in acquire
    fut = self._get_loop().create_future()
          ~~~~~~~~~~~~~~^^
  File "/Users/nongkhaem/.local/share/uv/python/cpython-3.13.5-macos-aarch64-none/lib/python3.13/asyncio/mixins.py", line 20, in _get_loop
    raise RuntimeError(f'{self!r} is bound to a different event loop')
RuntimeError: <asyncio.locks.Lock object at 0x10deb7b60 [unlocked, waiters:1]> is bound to a different event loop

======================================================================
Recovery Suggestions:
  1. Check if you are running a supported Python version (3.10+ recommended).
  1. Verify that background tasks are correctly deferred until the loop is running.
  *. If the issue persists, report it to Ivan over another LXMF client: f489752fbef161c64d65e385a4e9fc74
======================================================================

^CReceived signal 2: flushing databases before shutdown...
Tearing down Identity Context for e5d7854194163e74763fa5ca0ae0b822...
nongkhaem@nongkhaems-Macbook-Air ~ % meshchatx

Checklist

  • I searched existing issues to avoid duplicates
  • I included my MeshChatX version, channel, operating system, and install method
  • I can reproduce the issue with the steps above

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions