From: Jonathan Rajotte Date: Thu, 17 Mar 2016 20:18:14 +0000 (-0400) Subject: Clean-up shm directory tree after freeing the channel X-Git-Tag: v2.9.0-rc1~325 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=ea853771023cfeb9ca8ca3853a64d444855d60fb Clean-up shm directory tree after freeing the channel On NFS, an unlinked file that is still mmaped or unclosed is kept around by creating a .nfsXXXX file since it may still be in use. [1] This prevents the effective cleanup of the shm tree directory because it happens before the userspace consumer shm handles table cleanup. [2] Moving the tree removal to lttng_ustconsumer_free_channel ensures that the cleanup is done when the files are completely closed/unmapped. [1] http://nfs.sourceforge.net/ Look for "silly rename" [2] See channel_free subcall to shm_object_table_destroy Signed-off-by: Jonathan Rajotte Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c index fe7445b7f..a113ef129 100644 --- a/src/common/ust-consumer/ust-consumer.c +++ b/src/common/ust-consumer/ust-consumer.c @@ -1985,11 +1985,6 @@ void lttng_ustconsumer_del_channel(struct lttng_consumer_channel *chan) } } } - /* Try to rmdir all directories under shm_path root. */ - if (chan->root_shm_path[0]) { - (void) run_as_recursive_rmdir(chan->root_shm_path, - chan->uid, chan->gid); - } } void lttng_ustconsumer_free_channel(struct lttng_consumer_channel *chan) @@ -1999,6 +1994,11 @@ void lttng_ustconsumer_free_channel(struct lttng_consumer_channel *chan) consumer_metadata_cache_destroy(chan); ustctl_destroy_channel(chan->uchan); + /* Try to rmdir all directories under shm_path root. */ + if (chan->root_shm_path[0]) { + (void) run_as_recursive_rmdir(chan->root_shm_path, + chan->uid, chan->gid); + } free(chan->stream_fds); }