• P
    qmp: isolate responses into io thread · abe3cd0f
    Peter Xu 提交于
    For those monitors who have enabled IO thread, we'll offload the
    responding procedure into IO thread.  The main reason is that chardev is
    not thread safe, and we need to do all the read/write IOs in the same
    thread.  For use_io_thr=true monitors, that thread is the IO thread.
    
    We do this isolation in similar pattern as what we have done to the
    request queue: we first create one response queue for each monitor, then
    instead of replying directly in the main thread, we queue the responses
    and kick the IO thread to do the rest of the job for us.
    
    A funny thing after doing this is that, when the QMP clients send "quit"
    to QEMU, it's possible that we close the IOThread even earlier than
    replying to that "quit".  So another thing we need to do before cleaning
    up the monitors is that we need to flush the response queue (we don't
    need to do that for command queue; after all we are quitting) to make
    sure replies for handled commands are always flushed back to clients.
    Reviewed-by: NFam Zheng <famz@redhat.com>
    Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: NPeter Xu <peterx@redhat.com>
    Message-Id: <20180309090006.10018-20-peterx@redhat.com>
    Signed-off-by: NEric Blake <eblake@redhat.com>
    abe3cd0f
monitor.c 127.4 KB