| 803 | self._release_waiter() |
| 804 | |
| 805 | def _release( |
| 806 | self, |
| 807 | key: "ConnectionKey", |
| 808 | protocol: ResponseHandler, |
| 809 | *, |
| 810 | should_close: bool = False, |
| 811 | ) -> None: |
| 812 | if self._closed: |
| 813 | # acquired connection is already released on connector closing |
| 814 | return |
| 815 | |
| 816 | self._release_acquired(key, protocol) |
| 817 | |
| 818 | if self._force_close or should_close or protocol.should_close: |
| 819 | transport = protocol.transport |
| 820 | protocol.close() |
| 821 | |
| 822 | if key.is_ssl and not self._cleanup_closed_disabled: |
| 823 | self._cleanup_closed_transports.append(transport) |
| 824 | return |
| 825 | |
| 826 | self._conns[key].append((protocol, monotonic())) |
| 827 | |
| 828 | if self._cleanup_handle is None: |
| 829 | self._cleanup_handle = helpers.weakref_handle( |
| 830 | self, |
| 831 | "_cleanup", |
| 832 | self._keepalive_timeout, |
| 833 | self._loop, |
| 834 | timeout_ceil_threshold=self._timeout_ceil_threshold, |
| 835 | ) |
| 836 | |
| 837 | async def _create_connection( |
| 838 | self, req: ClientRequest, traces: list["Trace"], timeout: "ClientTimeout" |