/*
 * call-seq:
 *      rd.evaporate!        -> nil
 *
 * Releases mmap()-ed memory allocated for the Raindrops object back
 * to the OS.  The Ruby garbage collector will also release memory
 * automatically when it is not needed, but this forces release
 * under high memory pressure.
 */
static VALUE evaporate_bang(VALUE self)
{
        struct raindrops *r = get(self);
        void *addr = r->drops;

        r->drops = MAP_FAILED;
        if (munmap(addr, raindrop_size * r->capa) != 0)
                rb_sys_fail("munmap");
        return Qnil;
}