Compare commits
No commits in common. "07781e38cd5dd0b60b071b5d9ca6f68457ff38da" and "9aebe7d8f993ab62404f85abcb694e11e22c48cb" have entirely different histories.
07781e38cd
...
9aebe7d8f9
|
@ -1,85 +0,0 @@
|
||||||
from contextlib import (
|
|
||||||
asynccontextmanager as acm,
|
|
||||||
)
|
|
||||||
from functools import partial
|
|
||||||
|
|
||||||
import tractor
|
|
||||||
import trio
|
|
||||||
|
|
||||||
|
|
||||||
log = tractor.log.get_logger(
|
|
||||||
name=__name__
|
|
||||||
)
|
|
||||||
|
|
||||||
_lock: trio.Lock|None = None
|
|
||||||
|
|
||||||
|
|
||||||
@acm
|
|
||||||
async def acquire_singleton_lock(
|
|
||||||
) -> None:
|
|
||||||
global _lock
|
|
||||||
if _lock is None:
|
|
||||||
log.info('Allocating LOCK')
|
|
||||||
_lock = trio.Lock()
|
|
||||||
|
|
||||||
log.info('TRYING TO LOCK ACQUIRE')
|
|
||||||
async with _lock:
|
|
||||||
log.info('ACQUIRED')
|
|
||||||
yield _lock
|
|
||||||
|
|
||||||
log.info('RELEASED')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def hold_lock_forever(
|
|
||||||
task_status=trio.TASK_STATUS_IGNORED
|
|
||||||
):
|
|
||||||
async with (
|
|
||||||
tractor.trionics.maybe_raise_from_masking_exc(),
|
|
||||||
acquire_singleton_lock() as lock,
|
|
||||||
):
|
|
||||||
task_status.started(lock)
|
|
||||||
await trio.sleep_forever()
|
|
||||||
|
|
||||||
|
|
||||||
async def main(
|
|
||||||
ignore_special_cases: bool,
|
|
||||||
loglevel: str = 'info',
|
|
||||||
debug_mode: bool = True,
|
|
||||||
):
|
|
||||||
async with (
|
|
||||||
trio.open_nursery() as tn,
|
|
||||||
|
|
||||||
# tractor.trionics.maybe_raise_from_masking_exc()
|
|
||||||
# ^^^ XXX NOTE, interestingly putting the unmasker
|
|
||||||
# here does not exhibit the same behaviour ??
|
|
||||||
):
|
|
||||||
if not ignore_special_cases:
|
|
||||||
from tractor.trionics import _taskc
|
|
||||||
_taskc._mask_cases.clear()
|
|
||||||
|
|
||||||
_lock = await tn.start(
|
|
||||||
hold_lock_forever,
|
|
||||||
)
|
|
||||||
with trio.move_on_after(0.2):
|
|
||||||
await tn.start(
|
|
||||||
hold_lock_forever,
|
|
||||||
)
|
|
||||||
|
|
||||||
tn.cancel_scope.cancel()
|
|
||||||
|
|
||||||
|
|
||||||
# XXX, manual test as script
|
|
||||||
if __name__ == '__main__':
|
|
||||||
tractor.log.get_console_log(level='info')
|
|
||||||
for case in [True, False]:
|
|
||||||
log.info(
|
|
||||||
f'\n'
|
|
||||||
f'------ RUNNING SCRIPT TRIAL ------\n'
|
|
||||||
f'ignore_special_cases: {case!r}\n'
|
|
||||||
)
|
|
||||||
trio.run(partial(
|
|
||||||
main,
|
|
||||||
ignore_special_cases=case,
|
|
||||||
loglevel='info',
|
|
||||||
))
|
|
|
@ -95,7 +95,6 @@ def run_example_in_subproc(
|
||||||
and 'integration' not in p[0]
|
and 'integration' not in p[0]
|
||||||
and 'advanced_faults' not in p[0]
|
and 'advanced_faults' not in p[0]
|
||||||
and 'multihost' not in p[0]
|
and 'multihost' not in p[0]
|
||||||
and 'trio' not in p[0]
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
ids=lambda t: t[1],
|
ids=lambda t: t[1],
|
||||||
|
|
|
@ -265,38 +265,3 @@ def test_unmask_aclose_as_checkpoint_on_aexit(
|
||||||
raise_unmasked=raise_unmasked,
|
raise_unmasked=raise_unmasked,
|
||||||
child_errors_mid_stream=child_errors_mid_stream,
|
child_errors_mid_stream=child_errors_mid_stream,
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
|
||||||
'ignore_special_cases', [
|
|
||||||
True,
|
|
||||||
pytest.param(
|
|
||||||
False,
|
|
||||||
marks=pytest.mark.xfail(
|
|
||||||
reason="see examples/trio/lockacquire_not_umasked.py"
|
|
||||||
)
|
|
||||||
),
|
|
||||||
]
|
|
||||||
)
|
|
||||||
def test_cancelled_lockacquire_in_ipctx_not_unmaskeed(
|
|
||||||
ignore_special_cases: bool,
|
|
||||||
loglevel: str,
|
|
||||||
debug_mode: bool,
|
|
||||||
):
|
|
||||||
mod: ModuleType = pathlib.import_path(
|
|
||||||
examples_dir()
|
|
||||||
/ 'trio'
|
|
||||||
/ 'lockacquire_not_unmasked.py',
|
|
||||||
root=examples_dir(),
|
|
||||||
consider_namespace_packages=False,
|
|
||||||
)
|
|
||||||
async def _main():
|
|
||||||
with trio.fail_after(2):
|
|
||||||
await mod.main(
|
|
||||||
ignore_special_cases=ignore_special_cases,
|
|
||||||
loglevel=loglevel,
|
|
||||||
debug_mode=debug_mode,
|
|
||||||
)
|
|
||||||
|
|
||||||
trio.run(_main)
|
|
||||||
|
|
Loading…
Reference in New Issue