James Hogan 3a3567d337 qemu-char: fix infinite recursion connecting to monitor pty
Since commit bd5c51e (qemu-char: don't issue CHR_EVENT_OPEN in a BH), an
infinite recursion occurs when putting the monitor on a pty (-monitor
pty) and connecting a terminal to the slave port.

This is because of the qemu_chr_be_event(s, CHR_EVENT_OPENED) added to
qemu_chr_be_generic_open(). This event is captured by monitor_event()
which prints a welcome message to the character device. The flush of
that welcome message retriggers another open event in pty_chr_state()
because it checks s->connected, but only sets it to 1 after calling
qemu_chr_be_generic_open().

I've fixed this by setting s->connected = 1 before the call to
qemu_chr_be_generic_open() instead of after, so that the recursive
pty_chr_state() doesn't call it again.

An example snippet of repeating backtrace:
 ...
 #107486 0x007aec58 in monitor_flush (mon=0xf418b0) at qemu/monitor.c:288
 #107487 0x007aee7c in monitor_puts (mon=0xf418b0, str=0x1176d07 "") at qemu/monitor.c:322
 #107488 0x007aef20 in monitor_vprintf (mon=0xf418b0, fmt=0x8d4820 "QEMU %s monitor - type 'help' for more information\n",
     ap=0x7f432be0) at qemu/monitor.c:339
 #107489 0x007aefac in monitor_printf (mon=0xf418b0, fmt=0x8d4820 "QEMU %s monitor - type 'help' for more information\n")
     at qemu/monitor.c:347
 #107490 0x007ba4bc in monitor_event (opaque=0xf418b0, event=2) at qemu/monitor.c:4699
 #107491 0x00684c28 in qemu_chr_be_event (s=0xf37788, event=2) at qemu/qemu-char.c:108
 #107492 0x00684c70 in qemu_chr_be_generic_open (s=0xf37788) at qemu/qemu-char.c:113
 #107493 0x006880a4 in pty_chr_state (chr=0xf37788, connected=1) at qemu/qemu-char.c:1145
 #107494 0x00687fa4 in pty_chr_update_read_handler (chr=0xf37788) at qemu/qemu-char.c:1121
 #107495 0x00687c9c in pty_chr_write (chr=0xf37788, buf=0x70b3c008 <Address 0x70b3c008 out of bounds>, len=538720)
     at qemu/qemu-char.c:1063
 #107496 0x00684cc4 in qemu_chr_fe_write (s=0xf37788, buf=0x70b3c008 <Address 0x70b3c008 out of bounds>, len=538720)
     at qemu/qemu-char.c:118
 ...

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Tested-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Message-id: 1375960178-10882-1-git-send-email-james.hogan@imgtec.com
Cc: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
2013-08-13 13:24:50 -05:00
2013-08-12 09:15:11 -05:00
2013-04-18 13:50:53 +02:00
2013-07-09 13:38:56 -05:00
2013-08-13 09:02:52 -05:00
2013-07-30 23:11:07 +01:00
2013-08-07 12:48:00 -05:00
2013-07-26 22:01:31 +02:00
2013-07-30 23:11:07 +01:00
2013-08-05 08:06:25 -05:00
2013-05-03 13:58:09 +02:00
2013-07-30 10:25:47 +02:00
2012-09-07 09:02:44 +03:00
2013-06-11 23:45:43 +04:00
2013-07-18 08:17:42 -07:00
2013-02-21 16:17:31 -06:00
2013-07-23 11:12:00 +02:00
2013-07-29 17:07:37 +02:00
2013-04-08 18:13:10 +02:00
2012-05-14 07:27:24 +02:00
2013-08-05 08:06:25 -05:00
2013-07-27 11:22:53 +04:00
2013-07-31 21:03:59 +02:00
2013-07-23 02:41:31 +02:00
2013-07-15 09:49:00 +02:00
2013-02-21 16:17:31 -06:00
2013-08-12 09:15:12 -05:00
2013-06-14 15:33:10 +01:00
2013-08-02 18:05:16 +04:00
2013-05-03 13:05:49 +02:00
2013-05-18 16:35:12 +04:00
2013-02-22 21:21:10 +01:00
2013-06-06 11:27:05 +02:00
2013-07-19 12:52:03 +04:00
2013-05-01 13:06:07 +02:00
2013-05-03 12:04:40 -05:00
2013-07-23 11:11:59 +02:00
2013-08-12 15:03:36 -05:00
2013-07-30 10:25:47 +02:00
2013-07-04 17:42:45 +02:00
2013-04-08 18:13:10 +02:00

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

- QEMU team
Description
A fork of QEMU-Nyx which is better suited for my bachelors thesis
Readme 154 MiB
Languages
C 90.3%
Dylan 2.5%
Python 2.1%
C++ 2%
Shell 1.7%
Other 1.4%