Running piglit with this was causing all sort of weird stuff happening
to my desktop (Chromium webpages become blank, Qt Creator flickered,
etc). I tracked this down to shared memory segment leakage when GL is
not shutdown properly. The segments can be seen running `ipcs` and
looking for nattch==0.
This changes fixes this by calling shmctl(IPC_RMID) soon after creation
(which does not remove the segment immediately, but simply marks it for
removal when no more processes are attached).
This matches src/mesa/drivers/x11/xm_buffer.c behaviour.
v2:
- move shmctl(IPC_RMID) after XShmAttach() for *BSD, per Chris Wilson
- remove stray debug printfs, spotted by Ian Romanick
NOTE: This is a candidate for stable branches.
Reviewed-by: Brian Paul <brianp@vmware.com>
&xlib_dt->shminfo,
width, height);
if (xlib_dt->tempImage == NULL) {
+ shmctl(xlib_dt->shminfo.shmid, IPC_RMID, 0);
xlib_dt->shm = False;
return;
}
XShmAttach(xlib_dt->display, &xlib_dt->shminfo);
XSync(xlib_dt->display, False);
+ /* Mark the segment to be destroyed, so that it is automatically destroyed
+ * when this process dies. Needs to be after XShmAttach() for *BSD.
+ */
+ shmctl(xlib_dt->shminfo.shmid, IPC_RMID, 0);
+
if (XErrorFlag) {
/* we are on a remote display, this error is normal, don't print it */
XFlush(xlib_dt->display);