Clean-up shm directory tree after freeing the channel
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Thu, 17 Mar 2016 20:18:14 +0000 (16:18 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 24 Mar 2016 18:50:03 +0000 (14:50 -0400)
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 <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/common/ust-consumer/ust-consumer.c

index fe7445b7f133818353fb96b1df10ed0171db88bf..a113ef12941762bfd054541e42d0c26924043629 100644 (file)
@@ -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)
 }
 
 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);
 
        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);
 }
 
        free(chan->stream_fds);
 }
 
This page took 0.026515 seconds and 4 git commands to generate.