On Fri, Aug 8, 2025 at 2:28 AM Markus Armbruster <arm...@redhat.com> wrote:
>
> John Snow <js...@redhat.com> writes:
>
> > On Wed, Jul 16, 2025 at 4:32 AM Markus Armbruster <arm...@redhat.com> wrote:
> >>
> >> John Snow <js...@redhat.com> writes:
> >>
> >> > On Fri, Jul 11, 2025, 10:47 AM Markus Armbruster <arm...@redhat.com> 
> >> > wrote:
> >>
> >> [...]
> >>
> >> >> Exception ignored in: <function QEMUMonitorProtocol.__del__ at 
> >> >> 0x7fcfcd080d60>
> >> >> Traceback (most recent call last):
> >> >>   File "/work/armbru/qemu/scripts/qmp/../../python/qemu/qmp/legacy.py", 
> >> >> line 310, in __del__
> >> >>     self.close()
> >> >>   File "/work/armbru/qemu/scripts/qmp/../../python/qemu/qmp/legacy.py", 
> >> >> line 281, in close
> >> >>     self._sync(
> >> >>   File "/work/armbru/qemu/scripts/qmp/../../python/qemu/qmp/legacy.py", 
> >> >> line 102, in _sync
> >> >>     return self._aloop.run_until_complete(
> >> >>   File "/usr/lib64/python3.13/asyncio/base_events.py", line 719, in 
> >> >> run_until_complete
> >> >>     return future.result()
> >> >>   File "/usr/lib64/python3.13/asyncio/tasks.py", line 507, in wait_for
> >> >>     return await fut
> >> >>   File 
> >> >> "/work/armbru/qemu/scripts/qmp/../../python/qemu/qmp/protocol.py", line 
> >> >> 399, in disconnect
> >> >>     await self._wait_disconnect()
> >> >>   File 
> >> >> "/work/armbru/qemu/scripts/qmp/../../python/qemu/qmp/protocol.py", line 
> >> >> 719, in _wait_disconnect
> >> >>     await all_defined_tasks  # Raise Exceptions from the bottom half.
> >> >>   File 
> >> >> "/work/armbru/qemu/scripts/qmp/../../python/qemu/qmp/protocol.py", line 
> >> >> 870, in _bh_loop_forever
> >> >>     await async_fn()
> >> >> RuntimeError: cannot reuse already awaited coroutine
> >> >
> >> > Curious about this backtrace. It looks like something has gone
> >> > fundamentally wrong in the internals and the error is being raised by the
> >> > garbage collector which is not ideal.
> >> >
> >> > Can you help me reproduce this? Even if it's old/bad code, I don't want
> >> > python-qemu-qmp faulting like this.
> >>
> >> Reproducer for Fedora 41, current master c079d3a31e4:
> >>
> >> Run
> >>
> >>     $ qemu-system-x86_64 -S -display none -chardev 
> >> socket,id=mon1,path=test-qmp,server=on,wait=off -mon 
> >> mode=control,id=qmp,chardev=mon1
> >>
> >> and
> >>
> >>     $ scripts/qmp/qom-tree -s test-qmp >/dev/null
> >>
> >> Questions?
> >>
> >
> > Doesn't seem to trigger for me on Fedora 42 from the c079d3a31e4
> > build. Is this a Python version difference thing rearing its head?
>
> I have no idea.
>
> Is there anything else I can do to help you?

Hm. Can you still reproduce this stack trace as of today?

If so, can you please try modifying
qemu.git/python/qemu/utils/qom_common.py and add "import logging" up
at the top, and modify the entry_point classmethod:

>       @classmethod
>      def entry_point(cls) -> int:
>      """
>          Build this command's parser, parse arguments, and run the command.
>
>          :return: `run`'s return code.
>          """
> +    logging.basicConfig(level=logging.DEBUG)
>      parser = argparse.ArgumentParser(description=cls.help)
>      cls.configure_parser(parser)
>      args = parser.parse_args()
>       return cls.command_runner(args)

And then try running the crashy version again, and send me the (quite
likely very long) output?

Note: I really oughtta add a formal --debug/DEBUG=1 configuration to
the QOM scripts so this is possible without code modification.


Reply via email to