| 44 | |
| 45 | |
| 46 | class _CoroutineDescriptorLock(BaseAsyncFileLock): |
| 47 | acquire_error: BaseException | None = None |
| 48 | acquire_error_before_descriptor: BaseException | None = None |
| 49 | descriptor: int | None = None |
| 50 | release_error: BaseException | None = None |
| 51 | release_error_before_close: BaseException | None = None |
| 52 | |
| 53 | async def _acquire(self) -> None: # ty: ignore[invalid-method-override] # coroutine backends are supported |
| 54 | if self.acquire_error_before_descriptor is not None: |
| 55 | raise self.acquire_error_before_descriptor |
| 56 | self.descriptor = self._context.lock_file_fd = os.open(self.lock_file, os.O_CREAT | os.O_RDWR, 0o600) |
| 57 | if self.acquire_error is not None: # pragma: needs fork |
| 58 | raise self.acquire_error |
| 59 | |
| 60 | async def _release(self) -> None: # ty: ignore[invalid-method-override] # coroutine backends are supported |
| 61 | if self.release_error_before_close is not None: # pragma: needs fork |
| 62 | raise self.release_error_before_close |
| 63 | os.close(cast("int", self._context.lock_file_fd)) |
| 64 | self._context.lock_file_fd = None |
| 65 | if self.release_error is not None: |
| 66 | raise self.release_error |
| 67 | |
| 68 | |
| 69 | @NEEDS_FORK # pragma: needs fork |
no outgoing calls