diff options
author | Yonit Halperin <yhalperi@redhat.com> | 2012-08-20 13:49:00 +0300 |
---|---|---|
committer | Yonit Halperin <yhalperi@redhat.com> | 2012-08-27 09:04:52 +0300 |
commit | 2a1369c91966450424910d51f39e4b57a7c8973f (patch) | |
tree | b49a1f83f86affaa92009a4ff643844f65ff7b6d /server | |
parent | c302e12c78acc24461e19691119557945e0c2dc8 (diff) | |
download | spice-2a1369c91966450424910d51f39e4b57a7c8973f.tar.gz spice-2a1369c91966450424910d51f39e4b57a7c8973f.tar.xz spice-2a1369c91966450424910d51f39e4b57a7c8973f.zip |
spice_server_vm_start/stop: notify red_dispatcher on vm start/stop
Till now, red_worker was notfied about vm status changes via QXLWorker->start/stop
(or spice_qxl_start/stop).
Newer qemu, that supports calling spice_server_vm_start/stop, will call only
these routines, and won't call QXLWorker->start/stop.
Diffstat (limited to 'server')
-rw-r--r-- | server/red_dispatcher.c | 22 | ||||
-rw-r--r-- | server/red_dispatcher.h | 2 | ||||
-rw-r--r-- | server/reds.c | 2 | ||||
-rw-r--r-- | server/spice.h | 6 |
4 files changed, 30 insertions, 2 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c index 8d9c073a..69d4f0a1 100644 --- a/server/red_dispatcher.c +++ b/server/red_dispatcher.c @@ -762,6 +762,28 @@ void red_dispatcher_set_mouse_mode(uint32_t mode) } } +void red_dispatcher_on_vm_stop(void) +{ + RedDispatcher *now = dispatchers; + + spice_debug(NULL); + while (now) { + red_dispatcher_stop(now); + now = now->next; + } +} + +void red_dispatcher_on_vm_start(void) +{ + RedDispatcher *now = dispatchers; + + spice_debug(NULL); + while (now) { + red_dispatcher_start(now); + now = now->next; + } +} + int red_dispatcher_count(void) { RedDispatcher *now = dispatchers; diff --git a/server/red_dispatcher.h b/server/red_dispatcher.h index 98f8ceaf..7e9ffe68 100644 --- a/server/red_dispatcher.h +++ b/server/red_dispatcher.h @@ -27,6 +27,8 @@ void red_dispatcher_set_mm_time(uint32_t); void red_dispatcher_on_ic_change(void); void red_dispatcher_on_sv_change(void); void red_dispatcher_set_mouse_mode(uint32_t mode); +void red_dispatcher_on_vm_stop(void); +void red_dispatcher_on_vm_start(void); int red_dispatcher_count(void); int red_dispatcher_add_renderer(const char *name); uint32_t red_dispatcher_qxl_ram_size(void); diff --git a/server/reds.c b/server/reds.c index b0c609f6..416dff40 100644 --- a/server/reds.c +++ b/server/reds.c @@ -4041,6 +4041,7 @@ SPICE_GNUC_VISIBLE void spice_server_vm_start(SpiceServer *s) st_item = SPICE_CONTAINEROF(item, SpiceCharDeviceStateItem, link); spice_char_device_start(st_item->st); } + red_dispatcher_on_vm_start(); } SPICE_GNUC_VISIBLE void spice_server_vm_stop(SpiceServer *s) @@ -4055,6 +4056,7 @@ SPICE_GNUC_VISIBLE void spice_server_vm_stop(SpiceServer *s) st_item = SPICE_CONTAINEROF(item, SpiceCharDeviceStateItem, link); spice_char_device_stop(st_item->st); } + red_dispatcher_on_vm_stop(); } ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte) diff --git a/server/spice.h b/server/spice.h index 5f82ed5a..fb51a471 100644 --- a/server/spice.h +++ b/server/spice.h @@ -134,8 +134,10 @@ struct QXLWorker { void spice_qxl_wakeup(QXLInstance *instance); void spice_qxl_oom(QXLInstance *instance); -void spice_qxl_start(QXLInstance *instance); -void spice_qxl_stop(QXLInstance *instance); +void spice_qxl_start(QXLInstance *instance); /* deprecated since 0.11.2 + spice_server_vm_start replaces it */ +void spice_qxl_stop(QXLInstance *instance); /* deprecated since 0.11.2 + spice_server_vm_stop replaces it */ void spice_qxl_update_area(QXLInstance *instance, uint32_t surface_id, struct QXLRect *area, struct QXLRect *dirty_rects, uint32_t num_dirty_rects, uint32_t clear_dirty_region); |