Skip to content

Conversation

@brandtbucher
Copy link
Member

@brandtbucherbrandtbucher commented Mar 2, 2022

CC @markshannon. These three share a lot of code, so it makes sense to convert them together.

Marking as DO-NOT-MERGE since LOAD_ATTR_MODULE is somehow causing assertion failures and unclosed resources in test_asyncio:

Details
/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=8mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=10mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=8open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/base_events.py:684: ResourceWarning: unclosedeventloop<_UnixSelectorEventLooprunning=Falseclosed=Falsedebug=False>_warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=9mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=10mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=9open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosed<socket.socketfd=6, family=1, type=1, proto=0>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=7mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=7open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=7mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=7open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=12mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=14mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=11mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=11open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/base_events.py:684: ResourceWarning: unclosedeventloop<_UnixSelectorEventLooprunning=Falseclosed=Falsedebug=False>_warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=13mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=12open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosed<socket.socketfd=11, family=1, type=1, proto=0>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=12mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=12open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=13mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=13open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=18mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=20mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=17mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=17open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/base_events.py:684: ResourceWarning: unclosedeventloop<_UnixSelectorEventLooprunning=Falseclosed=Falsedebug=False>_warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=19mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=18open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosed<socket.socketfd=17, family=1, type=1, proto=0>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=18mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=18open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/test_asyncio/test_streams.py:40: ResourceWarning: unclosedfile<_io.FileIOname=19mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=19open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=21idlebufsize=0>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=22mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=24mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=22mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=24mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=21mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=21open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=25mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=27mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=23mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=23open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=26mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=26open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=29mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=29open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=31mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=30mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=30open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=23mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=21mode='wb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=21open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=24mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=26mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=22mode='wb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=22open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=27mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=25mode='wb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=25open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=19mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=19open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=28open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=27idlebufsize=0>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=30mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=21mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=23mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=25mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=22mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=26mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=24mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=24open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=30mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=27mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=27open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=31mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=35mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=29mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=29open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=36mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=33mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=33open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtracebackpython: Python/ceval.c:5334: _PyEval_EvalFrameDefault: Assertion `frame->frame_obj==NULL' failed. FatalPythonerror: AbortedCurrentthread0x00007f0d476a3280 (mostrecentcallfirst): File"/home/brandtbucher/cpython/Lib/textwrap.py", line482inprefixed_linesFile"/home/brandtbucher/cpython/Lib/textwrap.py", line485inindentFile"/home/brandtbucher/cpython/Lib/traceback.py", line629inemitFile"/home/brandtbucher/cpython/Lib/traceback.py", line907informatFile"/home/brandtbucher/cpython/Lib/traceback.py", line140informat_exceptionFile"/home/brandtbucher/cpython/Lib/test/support/testresult.py", line92in__makeErrorDictFile"/home/brandtbucher/cpython/Lib/test/support/testresult.py", line102inaddErrorFile"/home/brandtbucher/cpython/Lib/unittest/case.py", line99in_addErrorFile"/home/brandtbucher/cpython/Lib/unittest/case.py", line74intestPartExecutorFile"/home/brandtbucher/cpython/Lib/contextlib.py", line155in__exit__File"/home/brandtbucher/cpython/Lib/unittest/case.py", line590inrunFile"/home/brandtbucher/cpython/Lib/unittest/case.py", line646in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/test/support/testresult.py", line140inrunFile"/home/brandtbucher/cpython/Lib/test/support/__init__.py", line1064in_run_suiteFile"/home/brandtbucher/cpython/Lib/test/support/__init__.py", line1190inrun_unittestFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line273in_test_moduleFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line309in_runtest_inner2File"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line352in_runtest_innerFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line227in_runtestFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line257inruntestFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest_mp.py", line84inrun_tests_workerFile"/home/brandtbucher/cpython/Lib/test/libregrtest/main.py", line678in_mainFile"/home/brandtbucher/cpython/Lib/test/libregrtest/main.py", line658inmainFile"/home/brandtbucher/cpython/Lib/test/libregrtest/main.py", line736inmainFile"/home/brandtbucher/cpython/Lib/test/regrtest.py", line43in_mainFile"/home/brandtbucher/cpython/Lib/test/regrtest.py", line47in<module>File"<frozen runpy>", line88in_run_codeFile"<frozen runpy>", line198in_run_module_as_main

Any ideas on why that might be are definitely appreciated... I've been staring at this for a while and am completely at a loss. The rest of the PR is ready for review, though.

https://bugs.python.org/issue46841

Python/ceval.c Outdated
Comment on lines 1462 to 1463
/* XXX: Remove this next line to make test_asyncio very angry! */ \
DEOPT_IF(LOAD_##attr_or_method == LOAD_ATTR, LOAD_##attr_or_method); \
Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All tests pass if we deopt every LOAD_ATTR_MODULE right here. Removing this line activates some very strange failures!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Casting a _PyLoadMethodCache to a _PyAttrCache may not be valid.

@brandtbucher
Copy link
MemberAuthor

(We're also going to want to hit this with the buildbots once it's working.)

Copy link
Member

@markshannonmarkshannon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the change to use arrays in the structs. It's much clearer that my _m1 field.

But, be careful of casting one struct to another, and be aware that the C compiler treats arrays as simple pointers.

def_op('BUILD_SET', 104) # Number of set items
def_op('BUILD_MAP', 105) # Number of dict entries
name_op('LOAD_ATTR', 106) # Index in name list
name_op('LOAD_ATTR', 106, 4) # Index in name list
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The existence of the LOAD_MODULE_ATTR_OR_METHOD macro implies that the LOAD_ATTR and LOAD_METHOD caches should have the same layout. Yet, this has size 4 and LOAD_METHOD has size 10.

This may be the source of your problem.
Are you using the two version numbers consistently?

_Py_CODEUNIT dict_offset;
_Py_CODEUNIT keys_version[2];
_Py_CODEUNIT descr[4];
} _PyLoadMethodCache;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that LOAD_METHOD_MODULE and LOAD_ATTR_MODULE share code, maybe change this to:

typedef struct{_PyAttrCache attr; _Py_CODEUNIT keys_version[2]; _Py_CODEUNIT descr[4]} _PyLoadMethodCache; 

Copy link
MemberAuthor

@brandtbucherbrandtbucherMar 3, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather leave it as-is. Otherwise, accessing the attr methods, including the counter, is a bit awkward.

In response to your other comments: I don't think we're doing anything illegal here, since we only use one consistent cache layout for each specialized form (meaning, _PyLoadMethodCache and _AttrCache members never alias each other). The exception is the counter member for all instructions, but C guarantees that it the first member of a struct will always be at offset 0. So no issues there.

Python/ceval.c Outdated
Comment on lines 1462 to 1463
/* XXX: Remove this next line to make test_asyncio very angry! */ \
DEOPT_IF(LOAD_##attr_or_method == LOAD_ATTR, LOAD_##attr_or_method); \
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Casting a _PyLoadMethodCache to a _PyAttrCache may not be valid.

@bedevere-bot
Copy link

When you're done making the requested changes, leave the comment: I have made the requested changes; please review again.

@brandtbucherbrandtbucher mentioned this pull request Mar 2, 2022
26 tasks
@brandtbucher
Copy link
MemberAuthor

brandtbucher commented Mar 2, 2022

Marking as DO-NOT-MERGE since LOAD_ATTR_MODULE is somehow causing assertion failures and unclosed resources in test_asyncio:

Details
/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=8mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=10mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=8open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/base_events.py:684: ResourceWarning: unclosedeventloop<_UnixSelectorEventLooprunning=Falseclosed=Falsedebug=False>_warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=9mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=10mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=9open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosed<socket.socketfd=6, family=1, type=1, proto=0>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=7mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=7open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=7mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=7open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=12mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=14mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=11mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=11open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/base_events.py:684: ResourceWarning: unclosedeventloop<_UnixSelectorEventLooprunning=Falseclosed=Falsedebug=False>_warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=13mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=12open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosed<socket.socketfd=11, family=1, type=1, proto=0>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=12mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=12open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=13mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=13open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=18mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=20mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=17mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=17open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/base_events.py:684: ResourceWarning: unclosedeventloop<_UnixSelectorEventLooprunning=Falseclosed=Falsedebug=False>_warn(f"unclosed event loop {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=19mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=18open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosed<socket.socketfd=17, family=1, type=1, proto=0>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/support/__init__.py:705: ResourceWarning: unclosedfile<_io.FileIOname=18mode='wb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=18open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/test/test_asyncio/test_streams.py:40: ResourceWarning: unclosedfile<_io.FileIOname=19mode='rb'closefd=True>gc.collect() ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=19open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=21idlebufsize=0>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=22mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=24mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=22mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=24mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=21mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=21open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=25mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=27mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=23mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=23open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=26mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=26open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=29mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=29open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=31mode='rb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/traceback.py:900: ResourceWarning: unclosedfile<_io.FileIOname=30mode='wb'closefd=True>formsg, excinreversed(output): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=30open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=23mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=21mode='wb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=21open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=24mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=26mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=22mode='wb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=22open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=27mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=25mode='wb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=25open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=19mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=19open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:1151: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>withself._lock: ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:561: ResourceWarning: unclosedtransport<_UnixReadPipeTransportfd=28open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=27idlebufsize=0>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/events.py:80: ResourceWarning: unclosedfile<_io.FileIOname=30mode='rb'closefd=True>self._context.run(self._callback, *self._args) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=21mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=23mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=25mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=22mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=26mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=24mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=24open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=28mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=30mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=27mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=27open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=31mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=35mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=29mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=29open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=36mode='rb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/textwrap.py:482: ResourceWarning: unclosedfile<_io.FileIOname=33mode='wb'closefd=True>defprefixed_lines(): ResourceWarning: Enabletracemalloctogettheobjectallocationtraceback/home/brandtbucher/cpython/Lib/asyncio/unix_events.py:760: ResourceWarning: unclosedtransport<_UnixWritePipeTransportfd=33open>_warn(f"unclosed transport {self!r}", ResourceWarning, source=self) ResourceWarning: Enabletracemalloctogettheobjectallocationtracebackpython: Python/ceval.c:5334: _PyEval_EvalFrameDefault: Assertion `frame->frame_obj==NULL' failed. FatalPythonerror: AbortedCurrentthread0x00007f0d476a3280 (mostrecentcallfirst): File"/home/brandtbucher/cpython/Lib/textwrap.py", line482inprefixed_linesFile"/home/brandtbucher/cpython/Lib/textwrap.py", line485inindentFile"/home/brandtbucher/cpython/Lib/traceback.py", line629inemitFile"/home/brandtbucher/cpython/Lib/traceback.py", line907informatFile"/home/brandtbucher/cpython/Lib/traceback.py", line140informat_exceptionFile"/home/brandtbucher/cpython/Lib/test/support/testresult.py", line92in__makeErrorDictFile"/home/brandtbucher/cpython/Lib/test/support/testresult.py", line102inaddErrorFile"/home/brandtbucher/cpython/Lib/unittest/case.py", line99in_addErrorFile"/home/brandtbucher/cpython/Lib/unittest/case.py", line74intestPartExecutorFile"/home/brandtbucher/cpython/Lib/contextlib.py", line155in__exit__File"/home/brandtbucher/cpython/Lib/unittest/case.py", line590inrunFile"/home/brandtbucher/cpython/Lib/unittest/case.py", line646in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/unittest/suite.py", line122inrunFile"/home/brandtbucher/cpython/Lib/unittest/suite.py", line84in__call__File"/home/brandtbucher/cpython/Lib/test/support/testresult.py", line140inrunFile"/home/brandtbucher/cpython/Lib/test/support/__init__.py", line1064in_run_suiteFile"/home/brandtbucher/cpython/Lib/test/support/__init__.py", line1190inrun_unittestFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line273in_test_moduleFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line309in_runtest_inner2File"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line352in_runtest_innerFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line227in_runtestFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest.py", line257inruntestFile"/home/brandtbucher/cpython/Lib/test/libregrtest/runtest_mp.py", line84inrun_tests_workerFile"/home/brandtbucher/cpython/Lib/test/libregrtest/main.py", line678in_mainFile"/home/brandtbucher/cpython/Lib/test/libregrtest/main.py", line658inmainFile"/home/brandtbucher/cpython/Lib/test/libregrtest/main.py", line736inmainFile"/home/brandtbucher/cpython/Lib/test/regrtest.py", line43in_mainFile"/home/brandtbucher/cpython/Lib/test/regrtest.py", line47in<module>File"<frozen runpy>", line88in_run_codeFile"<frozen runpy>", line198in_run_module_as_main

Okay, that was officially the wildest bug I've ever dealt with.

The problematic bytecode sequence (buried deep in asyncio) was:

LOAD_ATTR [CACHE] [CACHE] [CACHE] [CACHE] LOAD_FAST LOAD_ATTR 

Quickened:

LOAD_ATTR_ADAPTIVE [CACHE] [CACHE] [CACHE] [CACHE] LOAD_FAST LOAD_ATTR_ADAPTIVE 

After specializating the first LOAD_ATTR_ADAPTIVE:

LOAD_ATTR_MODULE [<counter>] [<version[0]>] [<version[1]>] [<index>] LOAD_FAST LOAD_ATTR_ADAPTIVE 

Finally, after specializing the second LOAD_ATTR_ADAPTIVE:

LOAD_ATTR_MODULE [<counter>] [<version[0]>] [<version[1]>] [LOAD_FAST] LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE LOAD_ATTR_INSTANCE_VALUE 

Did you catch that? The cached index was turned into a LOAD_FAST!

The code that did that is here. Basically, the low byte of the cached index just happened to be LOAD_FAST__LOAD_FAST, so the LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE specialization code changed it "back" into a LOAD_FAST.

What it really did, though, was change the module attribute cached index from 169 to 124. This also just happened to be a valid index into the os module's __dict__, and on subsequent runs the code ended up calling os.mknod(self._fileno, False) instead of os.set_blocking(self._fileno, False). This silently "works", and causes the code to leak tons of resources and break later in more subtle ways.

Phew.

@brandtbucher
Copy link
MemberAuthor

This whole incident highlights one limitation with the new inline caching approach: it's no longer safe to peek backwards at previous instructions, since you might actually be looking into a cache entry instead. I don't see how we can keep LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE without making LOAD_FAST adaptive (and even then, it will interact poorly with a previous LOAD_FAST__LOAD_FAST), so it probably just makes the most sense to just remove it for now.

I'll also go over the existing specialization code and see if we're doing this anywhere else.

@brandtbucher
Copy link
MemberAuthor

It also highlights the need for a quickened=True option in dis that we talked about before. This was a huge pain to debug by hand... _co_quickened helped a lot, though!

@brandtbucher
Copy link
MemberAuthor

Looping in @sweeneyde, since I might need to get rid of LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE as part of this PR (see my comments above).

@sweeneyde
Copy link
Member

Looping in @sweeneyde, since I might need to get rid of LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE as part of this PR (see my comments above).

I didn't see the macro benchmark needle move too much when it was added, so if it's architecturally necessary to, I have no problem with it being scrapped for now.

@brandtbucherbrandtbucher added the 🔨 test-with-buildbots Test PR w/ buildbots; report in status section label Mar 3, 2022
@bedevere-bot
Copy link

🤖 New build scheduled with the buildbot fleet by @brandtbucher for commit 452c78c 🤖

If you want to schedule another build, you need to add the ":hammer: test-with-buildbots" label again.

@bedevere-botbedevere-bot removed the 🔨 test-with-buildbots Test PR w/ buildbots; report in status section label Mar 3, 2022
@brandtbucher
Copy link
MemberAuthor

brandtbucher commented Mar 3, 2022

Buildbot failures look unrelated. x86 Gentoo Installed with X PR was just an SSL timeout, and AMD64 Arch Linux Usan PR is failing with the same errors in other PRs.

return-1;
}
if (err){
if (_Py_OPCODE(instr[0]) ==LOAD_ATTR_INSTANCE_VALUE){
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a common pair and it saves a POP/PUSH pair and an incref/decref pair, so I'd like to revisit this in the future.
Do we have an issue for that?

Copy link
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@brandtbucher@bedevere-bot@sweeneyde@markshannon@the-knights-who-say-ni