X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utils%2Fxshm.c;h=28439c030b92c7041bd2e21b8cf37af5ab7e1ee4;hb=49f5b54f312fe4ac2e9bc47581a72451bd0e8439;hp=ad30e2f888a330a758b93576662f16c2d1fadcde;hpb=2a991a811de4c7b22f812682b267b616a809fd9a;p=xscreensaver diff --git a/utils/xshm.c b/utils/xshm.c index ad30e2f8..28439c03 100644 --- a/utils/xshm.c +++ b/utils/xshm.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998 +/* xscreensaver, Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2006 * by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its @@ -21,9 +21,7 @@ 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 @@ -99,7 +97,7 @@ create_xshm_image (Display *dpy, Visual *visual, { Status status; XImage *image = 0; - if (!get_boolean_resource("useSHM", "Boolean")) + if (!get_boolean_resource(dpy, "useSHM", "Boolean")) return 0; if (!XShmQueryExtension (dpy)) @@ -158,9 +156,9 @@ create_xshm_image (Display *dpy, Visual *visual, shmdt (shm_info->shmaddr); image = 0; } - #ifdef DEBUG - fprintf(stderr, "%s: XShmAttach(dpy, shm_info) ==> True\n", progname); + else + fprintf(stderr, "%s: XShmAttach(dpy, shm_info) ==> True\n", progname); #endif XSync(dpy, False); @@ -189,4 +187,43 @@ create_xshm_image (Display *dpy, Visual *visual, 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 */