forked from goodboy/tractor
Add mention subactor uid during locking
parent
abf8bb2813
commit
07112089d0
|
@ -11,7 +11,7 @@ from typing import Awaitable, Tuple, Optional, Callable
|
||||||
from async_generator import aclosing
|
from async_generator import aclosing
|
||||||
import tractor
|
import tractor
|
||||||
import trio
|
import trio
|
||||||
# from trio.testing import wait_all_tasks_blocked
|
from trio.testing import wait_all_tasks_blocked
|
||||||
|
|
||||||
from .log import get_logger
|
from .log import get_logger
|
||||||
from . import _state
|
from . import _state
|
||||||
|
@ -117,19 +117,19 @@ class PdbwTeardown(pdbpp.Pdb):
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def _acquire_debug_lock():
|
async def _acquire_debug_lock(uid: Tuple[str, str]) -> None:
|
||||||
"""Acquire a actor local FIFO lock meant to mutex entry to a local
|
"""Acquire a actor local FIFO lock meant to mutex entry to a local
|
||||||
debugger entry point to avoid tty clobbering by multiple processes.
|
debugger entry point to avoid tty clobbering by multiple processes.
|
||||||
"""
|
"""
|
||||||
task_name = trio.lowlevel.current_task()
|
task_name = trio.lowlevel.current_task()
|
||||||
try:
|
try:
|
||||||
log.error(f"TTY BEING ACQUIRED by {task_name}")
|
log.error(f"TTY BEING ACQUIRED by {task_name}:{uid}")
|
||||||
await _debug_lock.acquire()
|
await _debug_lock.acquire()
|
||||||
log.error(f"TTY lock acquired by {task_name}")
|
log.error(f"TTY lock acquired by {task_name}:{uid}")
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
_debug_lock.release()
|
_debug_lock.release()
|
||||||
log.error(f"TTY lock released by {task_name}")
|
log.error(f"TTY lock released by {task_name}:{uid}")
|
||||||
|
|
||||||
|
|
||||||
def handler(signum, frame):
|
def handler(signum, frame):
|
||||||
|
@ -162,7 +162,7 @@ async def _hijack_stdin_relay_to_child(
|
||||||
# TODO: when we get to true remote debugging
|
# TODO: when we get to true remote debugging
|
||||||
# this will deliver stdin data
|
# this will deliver stdin data
|
||||||
log.warning(f"Actor {subactor_uid} is WAITING on stdin hijack lock")
|
log.warning(f"Actor {subactor_uid} is WAITING on stdin hijack lock")
|
||||||
async with _acquire_debug_lock():
|
async with _acquire_debug_lock(subactor_uid):
|
||||||
log.warning(f"Actor {subactor_uid} ACQUIRED stdin hijack lock")
|
log.warning(f"Actor {subactor_uid} ACQUIRED stdin hijack lock")
|
||||||
|
|
||||||
# with _disable_sigint():
|
# with _disable_sigint():
|
||||||
|
@ -266,9 +266,10 @@ def _breakpoint(debug_func) -> Awaitable[None]:
|
||||||
|
|
||||||
# block here one (at the appropriate frame *up* where
|
# block here one (at the appropriate frame *up* where
|
||||||
# ``breakpoint()`` was awaited and begin handling stdio
|
# ``breakpoint()`` was awaited and begin handling stdio
|
||||||
log.debug("Entering the synchronous world of the debugger")
|
log.debug("Entering the synchronous world of pdb")
|
||||||
debug_func(actor)
|
debug_func(actor)
|
||||||
|
|
||||||
|
|
||||||
# user code **must** await this!
|
# user code **must** await this!
|
||||||
return _bp()
|
return _bp()
|
||||||
|
|
||||||
|
@ -288,7 +289,7 @@ breakpoint = partial(
|
||||||
|
|
||||||
|
|
||||||
def _post_mortem(actor):
|
def _post_mortem(actor):
|
||||||
log.error(f"\nAttaching to pdb in crashed actor: {actor.uid}\n")
|
log.critical(f"\nAttaching to pdb in crashed actor: {actor.uid}\n")
|
||||||
# custom Pdb post-mortem entry
|
# custom Pdb post-mortem entry
|
||||||
pdbpp.xpm(Pdb=PdbwTeardown)
|
pdbpp.xpm(Pdb=PdbwTeardown)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue