X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=utils%2Fxshm.c;h=5e23456f7900b6c6a03e4c086c8db8d6631c2e02;hp=c9498e5b0e18e39891744e845c27a6738db8afaa;hb=a445bdd3e3ba4abbee441844b6665b4c3c13d48c;hpb=3d9140a05b5272fed0883a0af0a71e30ef44d47f diff --git a/utils/xshm.c b/utils/xshm.c index c9498e5b..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 @@ -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 */