summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2019-12-03 23:54:35 -0500
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-12-09 07:15:29 +0100
commit26991d0831e356c9ab86fa6cd0823afeaa0ec950 (patch)
treeaacce51d36b24984ef5a8a70cb41e64a75eb59b4 /lib
parentba612536725da20fe1fdbdec748dc1aca63d6357 (diff)
downloadandroid-node-v8-26991d0831e356c9ab86fa6cd0823afeaa0ec950.tar.gz
android-node-v8-26991d0831e356c9ab86fa6cd0823afeaa0ec950.tar.bz2
android-node-v8-26991d0831e356c9ab86fa6cd0823afeaa0ec950.zip
fs: add synchronous retries to rimraf
This commit gives the synchronous version of rimraf the same linear retry logic as the asynchronous version. Prior to this commit, sync rimraf kept retrying the operation as soon as possible until maxRetries was reached. PR-URL: https://github.com/nodejs/node/pull/30785 Fixes: https://github.com/nodejs/node/issues/30580 Refs: https://github.com/nodejs/node/pull/30569 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/internal/fs/rimraf.js8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/internal/fs/rimraf.js b/lib/internal/fs/rimraf.js
index 60310e1cf9..d6330fbe43 100644
--- a/lib/internal/fs/rimraf.js
+++ b/lib/internal/fs/rimraf.js
@@ -21,6 +21,7 @@ const {
} = require('fs');
const { join } = require('path');
const { setTimeout } = require('timers');
+const { sleep } = require('internal/util');
const notEmptyErrorCodes = new Set(['ENOTEMPTY', 'EEXIST', 'EPERM']);
const retryErrorCodes = new Set(
['EBUSY', 'EMFILE', 'ENFILE', 'ENOTEMPTY', 'EPERM']);
@@ -208,10 +209,13 @@ function _rmdirSync(path, options, originalErr) {
rimrafSync(join(path, child), options);
});
- for (let i = 0; i < options.maxRetries + 1; i++) {
+ for (let i = 1; i <= options.maxRetries + 1; i++) {
try {
return rmdirSync(path, options);
- } catch {} // Ignore errors.
+ } catch {
+ if (options.retryDelay > 0)
+ sleep(i * options.retryDelay);
+ }
}
}
}