From abbfe8e92e549bfb080d8990d78fbfc6083b2f67 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sun, 10 Apr 2022 23:24:11 -0500 Subject: [PATCH] Reduced lfs_dir_traverse's explicit stack to 3 frames This is possible thanks to invoxiaamo's optimization of compacting renames to avoid the O(n^3) nested filters. Not only does this significantly reduce the runtime cost of that operation, but it reduces the maximum possible depth of recursion to 3 frames. Deepest lfs_dir_traverse before: traverse with commit '-> traverse with filter '-> traverse with move '-> traverse with filter Deepest lfs_dir_traverse after: traverse with commit '-> traverse with move '-> traverse with filter --- lfs.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lfs.c b/lfs.c index 801e118..117595e 100644 --- a/lfs.c +++ b/lfs.c @@ -767,11 +767,10 @@ static int lfs_dir_traverse_filter(void *p, // maximum recursive depth of lfs_dir_traverse, the deepest call: // // traverse with commit -// '-> traverse with filter -// '-> traverse with move -// ' traverse with filter +// '-> traverse with move +// '-> traverse with filter // -#define LFS_DIR_TRAVERSE_DEPTH 4 +#define LFS_DIR_TRAVERSE_DEPTH 3 struct lfs_dir_traverse { const lfs_mdir_t *dir;