On 16/09/2025 18.23, John Snow wrote:
The client name is mutable, so the logging name should also change to
reflect it when it changes.

Signed-off-by: John Snow <[email protected]>
cherry picked from commit 
python-qemu-qmp@e10b73c633ce138ba30bc8beccd2ab31989eaf3d
Reviewed-by: Daniel P. BerrangĂ© <[email protected]>
---
  python/qemu/qmp/protocol.py | 24 ++++++++++++++++++++----
  1 file changed, 20 insertions(+), 4 deletions(-)

 Hi John,

there is a regression when running "scripts/device-crash-test -q": It now prints:

ERROR: Negotiation failed: EOFError
ERROR: Failed to establish session: EOFError

all the time. See also for example:

https://gitlab.com/qemu-project/qemu/-/jobs/11715477453#L145

Bisecting the issue pointed me to this patch here. Could you please have a look?

 Thanks,
  Thomas


diff --git a/python/qemu/qmp/protocol.py b/python/qemu/qmp/protocol.py
index 86e588881b7..ec4762c567b 100644
--- a/python/qemu/qmp/protocol.py
+++ b/python/qemu/qmp/protocol.py
@@ -217,10 +217,8 @@ class AsyncProtocol(Generic[T]):
      # -------------------------
def __init__(self, name: Optional[str] = None) -> None:
-        #: The nickname for this connection, if any.
-        self.name: Optional[str] = name
-        if self.name is not None:
-            self.logger = self.logger.getChild(self.name)
+        self._name: Optional[str]
+        self.name = name
# stream I/O
          self._reader: Optional[StreamReader] = None
@@ -257,6 +255,24 @@ def __repr__(self) -> str:
          tokens.append(f"runstate={self.runstate.name}")
          return f"<{cls_name} {' '.join(tokens)}>"
+ @property
+    def name(self) -> Optional[str]:
+        """
+        The nickname for this connection, if any.
+
+        This name is used for differentiating instances in debug output.
+        """
+        return self._name
+
+    @name.setter
+    def name(self, name: Optional[str]) -> None:
+        logger = logging.getLogger(__name__)
+        if name:
+            self.logger = logger.getChild(name)
+        else:
+            self.logger = logger
+        self._name = name
+
      @property  # @upper_half
      def runstate(self) -> Runstate:
          """The current `Runstate` of the connection."""


Reply via email to