diff options
author | Thomas Munro | 2023-02-01 01:29:51 +0000 |
---|---|---|
committer | Thomas Munro | 2023-02-01 01:40:25 +0000 |
commit | c2891175052772b603da6d0ae634e42b63b7f274 (patch) | |
tree | 354103b1e492c139ad4ea7f37310578d4f21d5bf | |
parent | 758f44bc3a365bed6b82db098bebc26ef441ba42 (diff) |
Try to fix pg_upgrade test on Windows, again.
Further to commit 54e72b66e, if rmtree() fails while cleaning up in
pg_upgrade, try again. This gives our Windows unlink() wrapper a chance
to reach its wait-for-the-other-process-to-go-away logic, if the first
go around initiated the unlink of a file that a concurrently exiting
program still has open.
Discussion: https://postgr.es/m/CA%2BhUKGKCVy2%3Do%3Dd8c2Va6a_3Rpf_KkhUitkWCZ3hzuO2VwLMXA%40mail.gmail.com
-rw-r--r-- | src/bin/pg_upgrade/util.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/bin/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c index 42dcbfc5b5..21ba4c8f12 100644 --- a/src/bin/pg_upgrade/util.c +++ b/src/bin/pg_upgrade/util.c @@ -68,7 +68,12 @@ cleanup_output_dirs(void) if (log_opts.retain) return; - (void) rmtree(log_opts.basedir, true); + /* + * Try twice. The second time might wait for files to finish being + * unlinked, on Windows. + */ + if (!rmtree(log_opts.basedir, true)) + rmtree(log_opts.basedir, true); /* Remove pg_upgrade_output.d only if empty */ switch (pg_check_dir(log_opts.rootdir)) @@ -80,7 +85,13 @@ cleanup_output_dirs(void) case 1: /* exists and empty */ case 2: /* exists and contains only dot files */ - (void) rmtree(log_opts.rootdir, true); + + /* + * Try twice. The second time might wait for files to finish + * being unlinked, on Windows. + */ + if (!rmtree(log_opts.rootdir, true)) + rmtree(log_opts.rootdir, true); break; case 4: /* exists */ |