)]}'
{
  "commit": "e714f1a3d4d1e66b9a3ff4be1ff999c32bbef29e",
  "tree": "18f7dd1d6e789546743bac4ff029313a7f5e9cf4",
  "parents": [
    "d968d29df088d8ce32aca899ed3e30494935e153"
  ],
  "author": {
    "name": "Jie Song",
    "email": "songjie_yewu@cmss.chinamobile.com",
    "time": "Tue Nov 25 22:07:06 2025 +0800"
  },
  "committer": {
    "name": "Markus Armbruster",
    "email": "armbru@redhat.com",
    "time": "Wed Jan 07 17:05:25 2026 +0100"
  },
  "message": "monitor/qmp: cleanup SocketChardev listener sources early to avoid fd handling race\n\nWhen starting a dummy QEMU process with virsh version, monitor_init_qmp()\nenables IOThread monitoring of the QMP fd by default. However, a race\ncondition exists during the initialization phase: the IOThread only removes\nthe main thread\u0027s fd watch when it reaches qio_net_listener_set_client_func_full(),\nwhich may be delayed under high system load.\n\nThis creates a window between monitor_qmp_setup_handlers_bh() and\nqio_net_listener_set_client_func_full() where both the main thread and\nIOThread are simultaneously monitoring the same fd and processing events.\nThis race can cause either the main thread or the IOThread to hang and\nbecome unresponsive.\n\nFix this by proactively cleaning up the listener\u0027s IO sources in\nmonitor_init_qmp() before the IOThread initializes QMP monitoring,\nensuring exclusive fd ownership and eliminating the race condition.\n\nSigned-off-by: Jie Song \u003csongjie_yewu@cmss.chinamobile.com\u003e\nReviewed-by: Marc-André Lureau \u003cmarcandre.lureau@redhat.com\u003e\nMessage-ID: \u003c20251125140706.114197-1-mail@jiesong.me\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3be17b51ca5e4e0b1420130ecb53b743c2d7af0a",
      "old_mode": 33188,
      "old_path": "chardev/char-io.c",
      "new_id": "beac5cd245eb8ef169de47306aa6d9cd1241375b",
      "new_mode": 33188,
      "new_path": "chardev/char-io.c"
    },
    {
      "type": "modify",
      "old_id": "26d2f11202e41f103449ae9e189d00576b24f3dd",
      "old_mode": 33188,
      "old_path": "chardev/char-socket.c",
      "new_id": "3f45dd2ecdc755b2043f0bcc4aa205ce62bbb9a6",
      "new_mode": 33188,
      "new_path": "chardev/char-socket.c"
    },
    {
      "type": "modify",
      "old_id": "ac379ea70e38b1b50d55b53ab74c0dd8594ad254",
      "old_mode": 33188,
      "old_path": "include/chardev/char-io.h",
      "new_id": "540131346d169cae300f9152a4a63abd9b2a2bff",
      "new_mode": 33188,
      "new_path": "include/chardev/char-io.h"
    },
    {
      "type": "modify",
      "old_id": "b65e9981c14af63a7b112c19170edd3c4bdf2bde",
      "old_mode": 33188,
      "old_path": "include/chardev/char.h",
      "new_id": "192cad67d413b8f6b8b41e2476f33a84da9e1ef6",
      "new_mode": 33188,
      "new_path": "include/chardev/char.h"
    },
    {
      "type": "modify",
      "old_id": "e1419a9efa39668df028a4e8d7db448ea529e40f",
      "old_mode": 33188,
      "old_path": "monitor/qmp.c",
      "new_id": "687019811fd610a53b7a066578e8caf5a5111678",
      "new_mode": 33188,
      "new_path": "monitor/qmp.c"
    }
  ]
}
