Release on deletion; safe to call during GC even when no event loop is running.
(self)
| 674 | _raise_body_and_release(body_error, release_error) |
| 675 | |
| 676 | def __del__(self) -> None: |
| 677 | """Release on deletion; safe to call during GC even when no event loop is running.""" |
| 678 | if vars(self).get("_creator_pid") != os.getpid(): |
| 679 | return # pragma: forked child |
| 680 | with contextlib.suppress(Exception): |
| 681 | try: |
| 682 | loop = asyncio.get_running_loop() |
| 683 | except RuntimeError: |
| 684 | loop = self._context.loop if self._context.loop and not self._context.loop.is_closed() else None |
| 685 | if loop is None: |
| 686 | return |
| 687 | if not loop.is_running(): # pragma: no cover |
| 688 | loop.run_until_complete(self.release(force=True)) |
| 689 | else: |
| 690 | loop.create_task(self.release(force=True)) |
| 691 | |
| 692 | |
| 693 | @dataclass |