* [Qemu-devel] [6712] monitor: Rework terminal management (Jan Kiszka)
@ 2009-03-05 23:01 Anthony Liguori
0 siblings, 0 replies; only message in thread
From: Anthony Liguori @ 2009-03-05 23:01 UTC (permalink / raw)
To: qemu-devel
Revision: 6712
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6712
Author: aliguori
Date: 2009-03-05 23:01:29 +0000 (Thu, 05 Mar 2009)
Log Message:
-----------
monitor: Rework terminal management (Jan Kiszka)
Remove the static MAX_MON limit by managing monitor terminals in a
linked list.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Modified Paths:
--------------
trunk/monitor.c
Modified: trunk/monitor.c
===================================================================
--- trunk/monitor.c 2009-03-05 23:01:23 UTC (rev 6711)
+++ trunk/monitor.c 2009-03-05 23:01:29 UTC (rev 6712)
@@ -67,8 +67,12 @@
const char *help;
} mon_cmd_t;
-#define MAX_MON 4
-static CharDriverState *monitor_hd[MAX_MON];
+struct Monitor {
+ CharDriverState *chr;
+ LIST_ENTRY(Monitor) entry;
+};
+
+static LIST_HEAD(mon_list, Monitor) mon_list;
static int hide_banner;
static const mon_cmd_t mon_cmds[];
@@ -79,7 +83,7 @@
static BlockDriverCompletionFunc *password_completion_cb;
static void *password_opaque;
-Monitor *cur_mon;
+Monitor *cur_mon = NULL;
static void monitor_start_input(void);
@@ -93,11 +97,13 @@
void monitor_flush(Monitor *mon)
{
- int i;
+ Monitor *m;
+
if (term_outbuf_index > 0) {
- for (i = 0; i < MAX_MON; i++)
- if (monitor_hd[i] && monitor_hd[i]->focus == 0)
- qemu_chr_write(monitor_hd[i], term_outbuf, term_outbuf_index);
+ LIST_FOREACH(m, &mon_list, entry) {
+ if (m->chr->focus == 0)
+ qemu_chr_write(m->chr, term_outbuf, term_outbuf_index);
+ }
term_outbuf_index = 0;
}
}
@@ -2921,28 +2927,25 @@
void monitor_init(CharDriverState *chr, int show_banner)
{
- int i;
+ Monitor *mon;
if (is_first_init) {
key_timer = qemu_new_timer(vm_clock, release_keys, NULL);
- if (!key_timer)
- return;
- for (i = 0; i < MAX_MON; i++) {
- monitor_hd[i] = NULL;
- }
is_first_init = 0;
}
- for (i = 0; i < MAX_MON; i++) {
- if (monitor_hd[i] == NULL) {
- monitor_hd[i] = chr;
- break;
- }
- }
+ mon = qemu_mallocz(sizeof(*mon));
+
hide_banner = !show_banner;
- qemu_chr_add_handlers(chr, term_can_read, term_read, term_event, cur_mon);
+ mon->chr = chr;
+ qemu_chr_add_handlers(chr, term_can_read, term_read, term_event, mon);
+
+ LIST_INSERT_HEAD(&mon_list, mon, entry);
+ if (!cur_mon)
+ cur_mon = mon;
+
readline_start("", 0, monitor_command_cb, NULL);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-03-05 23:01 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-05 23:01 [Qemu-devel] [6712] monitor: Rework terminal management (Jan Kiszka) Anthony Liguori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).