X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utils%2Fxshm.c;h=5e23456f7900b6c6a03e4c086c8db8d6631c2e02;hb=82c5080773aae5e72ec155327c075775e023d2ee;hp=ad30e2f888a330a758b93576662f16c2d1fadcde;hpb=2a991a811de4c7b22f812682b267b616a809fd9a;p=xscreensaver diff --git a/utils/xshm.c b/utils/xshm.c index ad30e2f8..5e23456f 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 * by Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its @@ -158,9 +158,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 +189,42 @@ 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%x) failed", progname, 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 */