@@ -150,17 +150,16 @@ void qxl_spice_update_area(PCIQXLDevice *qxl, uint32_t surface_id,
dirty_rects, num_dirty_rects, clear_dirty_region);
} else {
#if SPICE_INTERFACE_QXL_MINOR >= 1
- struct QXLRect *area_copy;
- if (cookie == NULL) {
- area_copy = g_malloc0(sizeof(*area_copy));
- memcpy(area_copy, area, sizeof(*area));
- area = area_copy;
- cookie = qxl_cookie_new(QXL_COOKIE_TYPE_IO,
- QXL_IO_UPDATE_AREA_ASYNC,
- (uint64_t)area_copy);
- }
+ assert(cookie != NULL);
+#if SPICE_SERVER_VERSION >= 0x000a02
+ /* use dirty rectangles updating api introduced in 0.10.2 */
+ spice_qxl_update_area_dirty_async(&qxl->ssd.qxl, surface_id, area,
+ dirty_rects, num_dirty_rects, clear_dirty_region,
+ (uint64_t)cookie);
+#else
spice_qxl_update_area_async(&qxl->ssd.qxl, surface_id, area,
clear_dirty_region, (uint64_t)cookie);
+#endif
#else
abort();
#endif