qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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).