Paolo Bonzini 7b3621f47a qemu-char: fix deadlock with "-monitor pty"
qemu_chr_be_generic_open cannot be called with the write lock taken,
because it calls client code that may call qemu_chr_fe_write.  This
actually happens for the monitor:

    0x00007ffff27dbf79 in __GI_raise (sig=sig@entry=6)
    0x00007ffff27df388 in __GI_abort ()
    0x00005555555ef489 in error_exit (err=<optimized out>, msg=msg@entry=0x5555559796d0 <__func__.5959> "qemu_mutex_lock")
    0x00005555558f9080 in qemu_mutex_lock (mutex=mutex@entry=0x555556248a30)
    0x0000555555713936 in qemu_chr_fe_write (s=0x555556248a30, buf=buf@entry=0x5555563d8870 "QEMU 2.0.90 monitor - type 'help' for more information\r\n", len=56)
    0x00005555556217fd in monitor_flush_locked (mon=mon@entry=0x555556251fd0)
    0x0000555555621a12 in monitor_flush_locked (mon=0x555556251fd0)
    monitor_puts (mon=mon@entry=0x555556251fd0, str=0x55555634bfa7 "", str@entry=0x55555634bf70 "QEMU 2.0.90 monitor - type 'help' for more information\n")
    0x0000555555624359 in monitor_vprintf (mon=0x555556251fd0, fmt=<optimized out>, ap=<optimized out>)
    0x0000555555624414 in monitor_printf (mon=<optimized out>, fmt=fmt@entry=0x5555559105a0 "QEMU %s monitor - type 'help' for more information\n")
    0x0000555555629806 in monitor_event (opaque=0x555556251fd0, event=<optimized out>)
    0x000055555571343c in qemu_chr_be_generic_open (s=0x555556248a30)

To avoid this, defer the call to an idle callback, which will be
called as soon as the main loop is re-entered.  In order to simplify
the cleanup and do it in one place only, change pty_chr_close to
call pty_chr_state.

To reproduce, run with "-monitor pty", then try to read from the
slave /dev/pts/FOO that it creates.

Fixes: 9005b2a758
Reported-by: Li Liang <liangx.z.li@intel.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2014-07-14 16:13:58 +02:00
2013-04-18 13:50:53 +02:00
2014-06-23 11:00:12 -04:00
2014-07-08 15:08:03 +02:00
2014-06-27 09:27:56 -04:00
2014-06-05 16:10:33 +02:00
2014-06-29 18:59:06 +03:00
2014-06-05 16:10:33 +02:00
2012-09-07 09:02:44 +03:00
2014-06-27 09:27:55 -04:00
2014-06-16 13:24:35 +02:00
2013-09-05 09:40:31 -05:00
2014-06-09 15:43:40 +02:00
2014-06-23 11:12:28 -04:00
2013-10-11 09:34:56 -07:00
2014-07-10 17:06:29 +02:00
2014-06-23 11:01:25 -04:00
2014-06-05 16:10:33 +02:00
2013-07-23 02:41:31 +02:00
2014-06-19 18:44:21 +03:00
2014-06-19 16:41:54 +03:00
2013-08-12 09:15:12 -05:00
2014-06-23 11:01:25 -04:00
2013-09-03 12:25:55 +02:00
2014-06-23 19:09:50 +02:00
2014-06-30 12:50:17 +02:00
2014-07-06 09:13:53 +03:00
2014-03-13 14:34:16 +00:00
2014-05-28 17:36:21 +02:00
2014-07-07 09:15:29 +02:00
2014-06-16 17:23:21 +08:00
2014-07-07 09:15:29 +02:00
2014-06-09 15:43:40 +02:00
2014-05-24 00:07:29 +04:00
2014-06-27 10:39:10 +02:00
2013-10-11 09:34:56 -07:00
2014-02-17 11:57:23 -05:00
2014-06-05 16:10:33 +02:00
2014-07-08 16:53:59 +01:00
2013-10-11 09:34:56 -07:00
2014-05-07 16:16:43 +00:00
2014-07-07 10:37:40 +00:00
2014-07-07 10:37:40 +00:00

Read the documentation in qemu-doc.html or on http://wiki.qemu-project.org

- QEMU team
Description
No description provided
Readme 576 MiB
Languages
C 83%
C++ 6.3%
Python 3.2%
Dylan 2.9%
Shell 1.6%
Other 2.8%