diff --git a/configure.in b/configure.in index c2e3786..d24baa2 100644 --- a/configure.in +++ b/configure.in @@ -14,7 +14,7 @@ dnl changes are made dnl --- JACK_MAJOR_VERSION=0 JACK_MINOR_VERSION=72 -JACK_MICRO_VERSION=2 +JACK_MICRO_VERSION=3 dnl --- dnl HOWTO: updating the jack protocal version diff --git a/libjack/shm.c b/libjack/shm.c index cddbdce..ec2512b 100644 --- a/libjack/shm.c +++ b/libjack/shm.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -105,11 +106,45 @@ jack_initialize_shm () void jack_cleanup_shm () { +#if ! USE_POSIX_SHM + char path[PATH_MAX+1]; + DIR *dir; + struct dirent *dirent; +#endif int i; for (i = 0; i < jack_shm_id_cnt; i++) { jack_destroy_shm (jack_shm_registry[i].name); } +#if ! USE_POSIX_SHM + + snprintf (path, sizeof(path), "%s/jack/shm", jack_server_dir); + if ((dir = opendir (path)) == NULL) { + if (errno != ENOENT) { + jack_error ("cannot open jack shm directory (%s)", strerror (errno)); + } + } else { + while ((dirent = readdir (dir)) != NULL) { + char fullpath[PATH_MAX+1]; + snprintf (fullpath, sizeof (fullpath), "%s/jack/shm/%s", jack_server_dir, dirent->d_name); + unlink (fullpath); + } + } + closedir (dir); + + snprintf (path, sizeof(path), "%s/jack/shm", jack_server_dir); + if (rmdir (path)) { + if (errno != ENOENT) { + jack_error ("cannot remove JACK shm directory (%s)", strerror (errno)); + } + } + snprintf (path, sizeof(path), "%s/jack", jack_server_dir); + if (rmdir (path)) { + if (errno != ENOENT) { + jack_error ("cannot remove JACK directory (%s)", strerror (errno)); + } + } +#endif } #if USE_POSIX_SHM