Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2019-12-04 07:54:35 +0300
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-12-09 09:15:29 +0300
commit26991d0831e356c9ab86fa6cd0823afeaa0ec950 (patch)
treeaacce51d36b24984ef5a8a70cb41e64a75eb59b4 /lib/internal/fs
parentba612536725da20fe1fdbdec748dc1aca63d6357 (diff)
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/internal/fs')
-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 60310e1cf94..d6330fbe439 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);
+ }
}
}
}