From dc5ec83df9f472a4884786ac57532958e2244377 Mon Sep 17 00:00:00 2001 From: matt335672 <30179339+matt335672@users.noreply.github.com> Date: Tue, 30 Nov 2021 10:55:03 +0000 Subject: [PATCH] Log error on failure to attach to shared memory --- xup/xup.c | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/xup/xup.c b/xup/xup.c index 0d0dfcb7..e67d9477 100644 --- a/xup/xup.c +++ b/xup/xup.c @@ -1202,43 +1202,58 @@ process_server_paint_rect_shmem_ex(struct mod *amod, struct stream *s) bmpdata = 0; if (flags == 0) /* screen */ { - if (amod->screen_shmem_id_mapped == 0) + /* Do we need to map (or remap) the memory + * area shared with the X server ? */ + if (amod->screen_shmem_id_mapped == 0 || + amod->screen_shmem_id != shmem_id) { - amod->screen_shmem_id = shmem_id; - amod->screen_shmem_pixels = (char *) g_shmat(amod->screen_shmem_id); + if (amod->screen_shmem_id_mapped != 0) + { + g_shmdt(amod->screen_shmem_pixels); + } + amod->screen_shmem_pixels = (char *) g_shmat(shmem_id); if (amod->screen_shmem_pixels == (void *) -1) { /* failed */ + if (amod->screen_shmem_id_mapped == 0) + { + LOG(LOG_LEVEL_ERROR, + "Can't attach to shared memory id %d [%s]", + shmem_id, g_get_strerror()); + } + else + { + LOG(LOG_LEVEL_ERROR, + "Can't attach to shared memory id %d from id %d [%s]", + shmem_id, amod->screen_shmem_id, g_get_strerror()); + } amod->screen_shmem_id = 0; amod->screen_shmem_pixels = 0; amod->screen_shmem_id_mapped = 0; } else { + amod->screen_shmem_id = shmem_id; amod->screen_shmem_id_mapped = 1; } } - else if (amod->screen_shmem_id != shmem_id) - { - amod->screen_shmem_id = shmem_id; - g_shmdt(amod->screen_shmem_pixels); - amod->screen_shmem_pixels = (char *) g_shmat(amod->screen_shmem_id); - if (amod->screen_shmem_pixels == (void *) -1) - { - /* failed */ - amod->screen_shmem_id = 0; - amod->screen_shmem_pixels = 0; - amod->screen_shmem_id_mapped = 0; - } - } + if (amod->screen_shmem_pixels != 0) { bmpdata = amod->screen_shmem_pixels + shmem_offset; } } + else + { + LOG_DEVEL(LOG_LEVEL_ERROR, "process_server_paint_rect_shmem_ex:" + " flags=%d frame_id=%d, shmem_id=%d, shmem_offset=%d," + " width=%d, height=%d", + flags, frame_id, shmem_id, shmem_offset, + width, height); + } + if (bmpdata != 0) { - rv = amod->server_paint_rects(amod, num_drects, ldrects, num_crects, lcrects, bmpdata, width, height,