[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/3] QLIST-ify display change listeners.
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 1/3] QLIST-ify display change listeners. |
Date: |
Fri, 4 Jun 2010 16:43:00 +0200 |
Signed-off-by: Gerd Hoffmann <address@hidden>
---
console.h | 72 +++++++++++++++++++++++++++++++----------------------------
hw/xenfb.c | 2 +-
vl.c | 9 ++-----
3 files changed, 42 insertions(+), 41 deletions(-)
diff --git a/console.h b/console.h
index cac959f..3a80dca 100644
--- a/console.h
+++ b/console.h
@@ -161,7 +161,7 @@ struct DisplayChangeListener {
int w, int h, uint32_t c);
void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
- struct DisplayChangeListener *next;
+ QLIST_ENTRY(DisplayChangeListener) next;
};
struct DisplayAllocator {
@@ -176,7 +176,7 @@ struct DisplayState {
struct QEMUTimer *gui_timer;
struct DisplayAllocator* allocator;
- struct DisplayChangeListener* listeners;
+ QLIST_HEAD(, DisplayChangeListener) listeners;
void (*mouse_set)(int x, int y, int on);
void (*cursor_define)(QEMUCursor *cursor);
@@ -224,72 +224,76 @@ static inline int is_buffer_shared(DisplaySurface
*surface)
static inline void register_displaychangelistener(DisplayState *ds,
DisplayChangeListener *dcl)
{
- dcl->next = ds->listeners;
- ds->listeners = dcl;
+ QLIST_INSERT_HEAD(&ds->listeners, dcl, next);
}
static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
{
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
dcl->dpy_update(s, x, y, w, h);
- dcl = dcl->next;
}
}
static inline void dpy_resize(DisplayState *s)
{
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
dcl->dpy_resize(s);
- dcl = dcl->next;
}
}
static inline void dpy_setdata(DisplayState *s)
{
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
- if (dcl->dpy_setdata) dcl->dpy_setdata(s);
- dcl = dcl->next;
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->dpy_setdata) {
+ dcl->dpy_setdata(s);
+ }
}
}
static inline void dpy_refresh(DisplayState *s)
{
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
- if (dcl->dpy_refresh) dcl->dpy_refresh(s);
- dcl = dcl->next;
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->dpy_refresh) {
+ dcl->dpy_refresh(s);
+ }
}
}
static inline void dpy_copy(struct DisplayState *s, int src_x, int src_y,
- int dst_x, int dst_y, int w, int h) {
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
- if (dcl->dpy_copy)
+ int dst_x, int dst_y, int w, int h)
+{
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->dpy_copy) {
dcl->dpy_copy(s, src_x, src_y, dst_x, dst_y, w, h);
- else /* TODO */
+ } else { /* TODO */
dcl->dpy_update(s, dst_x, dst_y, w, h);
- dcl = dcl->next;
+ }
}
}
static inline void dpy_fill(struct DisplayState *s, int x, int y,
- int w, int h, uint32_t c) {
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
- if (dcl->dpy_fill) dcl->dpy_fill(s, x, y, w, h, c);
- dcl = dcl->next;
+ int w, int h, uint32_t c)
+{
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->dpy_fill) {
+ dcl->dpy_fill(s, x, y, w, h, c);
+ }
}
}
-static inline void dpy_cursor(struct DisplayState *s, int x, int y) {
- struct DisplayChangeListener *dcl = s->listeners;
- while (dcl != NULL) {
- if (dcl->dpy_text_cursor) dcl->dpy_text_cursor(s, x, y);
- dcl = dcl->next;
+static inline void dpy_cursor(struct DisplayState *s, int x, int y)
+{
+ struct DisplayChangeListener *dcl;
+ QLIST_FOREACH(dcl, &s->listeners, next) {
+ if (dcl->dpy_text_cursor) {
+ dcl->dpy_text_cursor(s, x, y);
+ }
}
}
diff --git a/hw/xenfb.c b/hw/xenfb.c
index 422cd53..472c9cb 100644
--- a/hw/xenfb.c
+++ b/hw/xenfb.c
@@ -707,7 +707,7 @@ static void xenfb_update(void *opaque)
if (xenfb_queue_full(xenfb))
return;
- for (l = xenfb->c.ds->listeners; l != NULL; l = l->next) {
+ QLIST_FOREACH(l, &xenfb->c.ds->listeners, next) {
if (l->idle)
continue;
idle = 0;
diff --git a/vl.c b/vl.c
index 527d068..9ca4e2f 100644
--- a/vl.c
+++ b/vl.c
@@ -1630,16 +1630,15 @@ static void gui_update(void *opaque)
{
uint64_t interval = GUI_REFRESH_INTERVAL;
DisplayState *ds = opaque;
- DisplayChangeListener *dcl = ds->listeners;
+ DisplayChangeListener *dcl;
qemu_flush_coalesced_mmio_buffer();
dpy_refresh(ds);
- while (dcl != NULL) {
+ QLIST_FOREACH(dcl, &ds->listeners, next) {
if (dcl->gui_timer_interval &&
dcl->gui_timer_interval < interval)
interval = dcl->gui_timer_interval;
- dcl = dcl->next;
}
qemu_mod_timer(ds->gui_timer, interval + qemu_get_clock(rt_clock));
}
@@ -3808,13 +3807,11 @@ int main(int argc, char **argv, char **envp)
}
dpy_resize(ds);
- dcl = ds->listeners;
- while (dcl != NULL) {
+ QLIST_FOREACH(dcl, &ds->listeners, next) {
if (dcl->dpy_refresh != NULL) {
ds->gui_timer = qemu_new_timer(rt_clock, gui_update, ds);
qemu_mod_timer(ds->gui_timer, qemu_get_clock(rt_clock));
}
- dcl = dcl->next;
}
if (display_type == DT_NOGRAPHIC || display_type == DT_VNC) {
--
1.6.6.1
- [Qemu-devel] [PATCH 1/3] QLIST-ify display change listeners.,
Gerd Hoffmann <=