)]}'
{
  "commit": "c7c4d063f50f0de980d99f02e055722227d703bc",
  "tree": "8ddfd7aa65bfb93a1c77d1edfa0f4c5576cad52e",
  "parents": [
    "cb365646a942ed58aae053064b2048a415337ba2"
  ],
  "author": {
    "name": "Paolo Bonzini",
    "email": "pbonzini@redhat.com",
    "time": "Wed Sep 25 14:20:59 2013 +0800"
  },
  "committer": {
    "name": "Paolo Bonzini",
    "email": "pbonzini@redhat.com",
    "time": "Thu Oct 17 17:30:55 2013 +0200"
  },
  "message": "qemu-thread: add QemuEvent\n\nThis emulates Win32 manual-reset events using futexes or conditional\nvariables.  Typical ways to use them are with multi-producer,\nsingle-consumer data structures, to test for a complex condition whose\nelements come from different threads:\n\n    for (;;) {\n        qemu_event_reset(ev);\n        ... test complex condition ...\n        if (condition is true) {\n            break;\n        }\n        qemu_event_wait(ev);\n    }\n\nOr more efficiently (but with some duplication):\n\n    ... evaluate condition ...\n    while (!condition) {\n        qemu_event_reset(ev);\n        ... evaluate condition ...\n        if (!condition) {\n            qemu_event_wait(ev);\n            ... evaluate condition ...\n        }\n    }\n\nQemuEvent provides a very fast userspace path in the common case when\nno other thread is waiting, or the event is not changing state.\n\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "361566abc40d41d88a9f00f340cb3c19a0575f71",
      "old_mode": 33188,
      "old_path": "include/qemu/thread-posix.h",
      "new_id": "eb5c7a1da12dc34cfd3b0fcb6e4c84352e996bc5",
      "new_mode": 33188,
      "new_path": "include/qemu/thread-posix.h"
    },
    {
      "type": "modify",
      "old_id": "13adb958f04804e3712d1b56439c181d3bfed962",
      "old_mode": 33188,
      "old_path": "include/qemu/thread-win32.h",
      "new_id": "3d58081bed77dd1a65a3869f8e8645e432e189fc",
      "new_mode": 33188,
      "new_path": "include/qemu/thread-win32.h"
    },
    {
      "type": "modify",
      "old_id": "c02404b9fbf853909c6c2996b484d30129434e37",
      "old_mode": 33188,
      "old_path": "include/qemu/thread.h",
      "new_id": "3e32c6531cb245fae1fc083ae7278ebb9f217f19",
      "new_mode": 33188,
      "new_path": "include/qemu/thread.h"
    },
    {
      "type": "modify",
      "old_id": "4de133e7b226b3081032ced1e22c810cd003a052",
      "old_mode": 33188,
      "old_path": "util/qemu-thread-posix.c",
      "new_id": "37dd298631037fb6ecde7b0a9e95ff4920288f34",
      "new_mode": 33188,
      "new_path": "util/qemu-thread-posix.c"
    },
    {
      "type": "modify",
      "old_id": "517878dcc17ca6c1507b8e3b380e0b8fce50f11a",
      "old_mode": 33188,
      "old_path": "util/qemu-thread-win32.c",
      "new_id": "27a5217769c8eb5711fdf4b3c0fef802fb1dd62d",
      "new_mode": 33188,
      "new_path": "util/qemu-thread-win32.c"
    }
  ]
}
