From: Alexander Larsson <al...@redhat.com> --- display/qxldd.h | 1 + display/res.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/display/qxldd.h b/display/qxldd.h index b55ad30..fb39b46 100644 --- a/display/qxldd.h +++ b/display/qxldd.h @@ -249,6 +249,7 @@ typedef struct PDev { UINT8 *surf_base; QuicData *quic_data; + HSEMAPHORE quic_data_sem; QXLCommandRing *cmd_ring; QXLCursorRing *cursor_ring; diff --git a/display/res.c b/display/res.c index 4202daa..9d244a6 100644 --- a/display/res.c +++ b/display/res.c @@ -1641,6 +1641,8 @@ static _inline Resource *GetQuicImage(PDev *pdev, SURFOBJ *surf, XLATEOBJ *color return NULL; } + EngAcquireSemaphore(pdev->quic_data_sem); + quic_data = pdev->quic_data; alloc_size = MIN(QUIC_ALLOC_BASE + (height * line_size >> 4), QUIC_ALLOC_BASE + QUIC_BUF_MAX); @@ -1672,13 +1674,18 @@ static _inline Resource *GetQuicImage(PDev *pdev, SURFOBJ *surf, XLATEOBJ *color if (data_size == QUIC_ERROR) { FreeQuicImage(pdev, image_res); DEBUG_PRINT((pdev, 13, "%s: error\n", __FUNCTION__)); - return NULL; + image_res = NULL; + goto out; } quic_data->chunk->data_size = (data_size - quic_data->prev_chunks_io_words) << 2; internal->image.quic.data_size = data_size << 2; DEBUG_PRINT((pdev, 13, "%s: done. row size %u quic size %u \n", __FUNCTION__, line_size * height, data_size << 2)); + + out: + EngReleaseSemaphore(pdev->quic_data_sem); + return image_res; } @@ -3207,6 +3214,8 @@ BOOL ResInit(PDev *pdev) return FALSE; } pdev->quic_data = usr_data; + pdev->quic_data_sem = EngCreateSemaphore(); + return TRUE; } @@ -3214,6 +3223,7 @@ void ResDestroy(PDev *pdev) { QuicData *usr_data = pdev->quic_data; quic_destroy(usr_data->quic); + EngDeleteSemaphore(pdev->quic_data_sem); EngFreeMem(usr_data); } -- 1.7.2.2 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel