diff options
author | Alexander Volkov <a.volkov@rusbitech.ru> | 2018-02-06 16:04:13 +0100 |
---|---|---|
committer | Kim Woelders <kim@woelders.dk> | 2018-02-08 15:34:53 +0100 |
commit | 56ca24fc9f240061eee9a8e62dbd65a9ba761cca (patch) | |
tree | 0355d667d90825161510079eefcf26c7202fa9a3 | |
parent | 6f62c70bacba2d2d8a08cf07b2c7ae173445f0b3 (diff) | |
download | imlib2-56ca24fc9f240061eee9a8e62dbd65a9ba761cca.tar.gz |
introduce __imlib_ShmDestroyXImage() instead of __imlib_ShmDetach()
Summary:
It enhances the code, because __imlib_ShmDestroyXImage() is symmetrical
to __imlib_ShmGetXImage(), while __imlib_ShmDetach() looks unrelated.
Reviewers: kwo
Reviewed By: kwo
Differential Revision: https://phab.enlightenment.org/D5787
-rw-r--r-- | src/lib/grab.c | 11 | ||||
-rw-r--r-- | src/lib/ximage.c | 10 | ||||
-rw-r--r-- | src/lib/ximage.h | 3 |
3 files changed, 16 insertions, 8 deletions
diff --git a/src/lib/grab.c b/src/lib/grab.c index c4239f4..b9b8ec8 100644 --- a/src/lib/grab.c +++ b/src/lib/grab.c @@ -733,13 +733,16 @@ __imlib_GrabDrawableToRGBA(DATA32 * data, int ox, int oy, int ow, int oh, /* destroy the Ximage */ if (is_shm) - __imlib_ShmDetach(d, &shminfo); - XDestroyImage(xim); + __imlib_ShmDestroyXImage(d, xim, &shminfo); + else + XDestroyImage(xim); + if (mxim) { if (is_mshm) - __imlib_ShmDetach(d, &mshminfo); - XDestroyImage(mxim); + __imlib_ShmDestroyXImage(d, mxim, &mshminfo); + else + XDestroyImage(mxim); } if (created_mask) XFreePixmap(d, m); diff --git a/src/lib/ximage.c b/src/lib/ximage.c index c94f725..96327f1 100644 --- a/src/lib/ximage.c +++ b/src/lib/ximage.c @@ -119,12 +119,13 @@ __imlib_ShmGetXImage(Display * d, Visual * v, Drawable draw, int depth, } void -__imlib_ShmDetach(Display * d, XShmSegmentInfo * si) +__imlib_ShmDestroyXImage(Display * d, XImage * xim, XShmSegmentInfo * si) { XSync(d, False); XShmDetach(d, si); shmdt(si->shmaddr); shmctl(si->shmid, IPC_RMID, 0); + XDestroyImage(xim); } /* "safe" realloc allowing handling of out-of-memory situations */ @@ -190,10 +191,13 @@ __imlib_FlushXImage(Display * d) list_mem_use -= xim->bytes_per_line * xim->height; if (list_si[i]) { - __imlib_ShmDetach(d, list_si[i]); + __imlib_ShmDestroyXImage(d, xim, list_si[i]); free(list_si[i]); } - XDestroyImage(xim); + else + { + XDestroyImage(xim); + } list_num--; for (j = i; j < list_num; j++) { diff --git a/src/lib/ximage.h b/src/lib/ximage.h index 2a7006e..f12757c 100644 --- a/src/lib/ximage.h +++ b/src/lib/ximage.h @@ -17,6 +17,7 @@ XImage *__imlib_ProduceXImage(Display * d, Visual * v, int depth, XImage *__imlib_ShmGetXImage(Display * d, Visual * v, Drawable draw, int depth, int x, int y, int w, int h, XShmSegmentInfo * si); -void __imlib_ShmDetach(Display * d, XShmSegmentInfo * si); +void __imlib_ShmDestroyXImage(Display * d, XImage * xim, + XShmSegmentInfo * si); #endif |