Hi,
On 09/07/2012 06:09 PM, Søren Sandmann Pedersen wrote:
client/display_channel.cpp | 1 +
server/red_worker.c | 31 +++++++++++++++++++++++++++++++
server/spice.h | 5 ++++-
3 files changed, 36 insertions(+), 1 deletion(-)
New commits:
commit 88283023a89b4ee212ac08ede797d1ce1c3a0906
Author: Søren Sandmann Pedersen <s...@redhat.com>
Date: Sat Sep 1 11:42:56 2012 -0400
Bump spice.h version number to 0.11.4
No new symbols are added, but there is an addition to QXLInterface:
void (*set_client_capabilities)(QXLInstance *qin,
uint8_t client_present,
uint8_t caps[58]);
I must admit I've never studied how we do qemu <-> spice ABI
compatibility too closely. But I believe only bumping the server
version is not enough.
This bump will allow qemu to detect compile time it is dealing with
a newer server, but what if we've an old qemu running with the new
server with the above addition to QXLInterface ?
Then the new code will do:
<snip>
diff --git a/server/red_worker.c b/server/red_worker.c
index eee9915..1e301c4 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -10344,6 +10344,23 @@ static void handle_new_display_channel(RedWorker
*worker, RedClient *client, Red
spice_info("jpeg %s", display_channel->enable_jpeg ? "enabled" :
"disabled");
spice_info("zlib-over-glz %s", display_channel->enable_zlib_glz_wrap ? "enabled" :
"disabled");
+ if (worker->qxl->st->qif->set_client_capabilities) {
+ RedChannelClient *rcc = (RedChannelClient *)dcc;
+ uint8_t caps[58] = { 0 };
+
+#define SET_CAP(a,c) \
+ ((a)[(c) / 8] |= (1 << ((c) % 8)))
+
+ if (red_channel_client_test_remote_cap(rcc,
SPICE_DISPLAY_CAP_SIZED_STREAM))
+ SET_CAP(caps, SPICE_DISPLAY_CAP_SIZED_STREAM);
+ if (red_channel_client_test_remote_cap(rcc,
SPICE_DISPLAY_CAP_MONITORS_CONFIG))
+ SET_CAP(caps, SPICE_DISPLAY_CAP_MONITORS_CONFIG);
+ if (red_channel_client_test_remote_cap(rcc,
SPICE_DISPLAY_CAP_COMPOSITE))
+ SET_CAP(caps, SPICE_DISPLAY_CAP_COMPOSITE);
+
+ worker->qxl->st->qif->set_client_capabilities(worker->qxl, TRUE, caps);
+ }
+
But this checks for qif->set_client_capabilities, which was not there in the old
QXLInterface struct definition which the old qemu used while compiling, so the
check will
point to memory *beyond* the end of the QXLInterface struct (as seen / defined
by the older
qemu binary)...
Regards,
Hans
_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel