diff --git a/src/fuse_operations.c b/src/fuse_operations.c index 02a16f0..6e9e135 100644 --- a/src/fuse_operations.c +++ b/src/fuse_operations.c @@ -41,6 +41,7 @@ #include "fuse_operations.h" #include "proc_operations.h" #include "sourcefs.h" +#include "temp_permissions_table.h" #include "ui-socket.h" static void *xmp_init(struct fuse_conn_info *conn, struct fuse_config *cfg) { @@ -67,6 +68,7 @@ static void *xmp_init(struct fuse_conn_info *conn, struct fuse_config *cfg) { cfg->negative_timeout = 0; fprintf(stderr, "%d\n", getpid()); assert(get_mountpoint() != NULL); + init_garbage_collector(); return NULL; } diff --git a/src/temp_permissions_table.c b/src/temp_permissions_table.c index cde01c3..8e04170 100644 --- a/src/temp_permissions_table.c +++ b/src/temp_permissions_table.c @@ -93,7 +93,7 @@ void *garbage_collector(void *arg) { (void)arg; while (is_gc_active) { - sleep(10); + sleep(1); pthread_mutex_lock(&temp_permissions_table_lock); vec(pid_t) blacklist; @@ -102,8 +102,10 @@ void *garbage_collector(void *arg) { for_each(&temp_permissions_table, pid, entry) { if (!is_valid(*pid, entry)) { push(&blacklist, *pid); - cleanup(&(entry->allowed_files)); - cleanup(&(entry->denied_files)); + for_each(&entry->allowed_files, allowed_file) { free(*allowed_file); } + cleanup(&entry->allowed_files); + for_each(&entry->denied_files, denied_file) { free(*denied_file); } + cleanup(&entry->denied_files); } } diff --git a/src/temp_permissions_table.h b/src/temp_permissions_table.h index 1d62965..26f1a27 100644 --- a/src/temp_permissions_table.h +++ b/src/temp_permissions_table.h @@ -13,6 +13,13 @@ */ int init_temp_permissions_table(void); +/** + * Starts the temporary permissions table garbage_collector. + * + * @return: 0 on success, -1 on failure (e.g. ENOMEM) + */ +int init_garbage_collector(void); + /** * Destroys the temporary permissions table. * diff --git a/test/test.bash b/test/test.bash index e287240..8c2b6de 100755 --- a/test/test.bash +++ b/test/test.bash @@ -210,4 +210,4 @@ fi sleep 0.5 #lsof +f -- $(realpath ./protected) umount "$(realpath ./protected)" -sleep 0.5 +sleep 2