-/* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998
+/* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2006
* by Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
needed, anyway.)
If you don't have man pages for this extension, see
- http://www.physik.uni-regensburg.de/~scs22156/sofie-0.2/mit-shm.html
- or in the R6 sources as "xc/doc/specs/Xext/mit-shm.ms", for example,
- ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/mit-shm.ms
+ http://www.x.org/X11R6.8.1/docs/Xext/
(This document seems not to ever remain available on the web in one place
for very long; you can search for it by the title, "MIT-SHM -- The MIT
{
Status status;
XImage *image = 0;
- if (!get_boolean_resource("useSHM", "Boolean"))
+ if (!get_boolean_resource(dpy, "useSHM", "Boolean"))
return 0;
if (!XShmQueryExtension (dpy))
return image;
}
+
+void
+destroy_xshm_image (Display *dpy, XImage *image, XShmSegmentInfo *shm_info)
+{
+ Status status;
+
+ CATCH_X_ERROR(dpy);
+ status = XShmDetach (dpy, shm_info);
+ UNCATCH_X_ERROR(dpy);
+ if (shm_got_x_error)
+ status = False;
+ if (!status)
+ fprintf (stderr, "%s: XShmDetach failed!\n", progname);
+#ifdef DEBUG
+ else
+ fprintf (stderr, "%s: XShmDetach(dpy, shm_info) ==> True\n", progname);
+#endif
+
+ XDestroyImage (image);
+ XSync(dpy, False);
+
+ status = shmdt (shm_info->shmaddr);
+
+ if (status != 0)
+ {
+ char buf[1024];
+ sprintf (buf, "%s: shmdt(0x%lx) failed", progname,
+ (unsigned long) shm_info->shmaddr);
+ perror(buf);
+ }
+#ifdef DEBUG
+ else
+ fprintf (stderr, "%s: shmdt(shm_info->shmaddr) ==> 0\n", progname);
+#endif
+
+ XSync(dpy, False);
+}
+
+
#endif /* HAVE_XSHM_EXTENSION */