(
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,
)
| 561 | |
| 562 | |
| 563 | def 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 | |
| 593 | def try_illegal_transition(lock_file: str, hold_mode: Literal["read", "write"], result: Synchronized[int]) -> None: |
nothing calls this directly
no test coverage detected