MCPcopy Create free account
hub / github.com/tox-dev/filelock / chain_reader

Function chain_reader

tests/test_read_write.py:563–590  ·  view source on GitHub ↗
(
    reader_index: int,
    lock_file: str,
    release_count: Synchronized[int],
    start_signal: EventType,
    release_signal: EventType,
    next_reader_signal: EventType | None,
    writer_or_prev_signal: EventType,
)

Source from the content-addressed store, hash-verified

561
562
563def chain_reader(
564 reader_index: int,
565 lock_file: str,
566 release_count: Synchronized[int],
567 start_signal: EventType,
568 release_signal: EventType,
569 next_reader_signal: EventType | None,
570 writer_or_prev_signal: EventType,
571) -> None:
572 start_signal.wait(timeout=_PROCESS_DEADLINE)
573
574 lock = ReadWriteLock(lock_file)
575 with lock.read_lock():
576 if reader_index > 0:
577 time.sleep(2) # overlap with earlier readers so the writer contends mid-chain
578
579 if next_reader_signal is not None:
580 next_reader_signal.set()
581
582 if reader_index == 0:
583 time.sleep(1) # hold briefly before releasing the writer
584
585 writer_or_prev_signal.set()
586
587 release_signal.wait(timeout=_PROCESS_DEADLINE)
588
589 with release_count.get_lock():
590 release_count.value += 1
591
592
593def try_illegal_transition(lock_file: str, hold_mode: Literal["read", "write"], result: Synchronized[int]) -> None:

Callers

nothing calls this directly

Calls 3

read_lockMethod · 0.95
ReadWriteLockClass · 0.90
get_lockMethod · 0.45

Tested by

no test coverage detected