summaryrefslogtreecommitdiffstats
path: root/apps/files_trashbin/lib
diff options
context:
space:
mode:
authorSven Strickroth <email@cs-ware.de>2021-08-15 18:58:16 +0200
committerSven Strickroth <email@cs-ware.de>2021-08-19 16:43:44 +0200
commit1c736abc352e27231e046ea249be5a51f3b3f4d7 (patch)
treede51fabd387872b6f547901de5937c6636963c8e /apps/files_trashbin/lib
parent35e73e437613e5313fdf9792c6699bb18c0072e3 (diff)
downloadnextcloud-server-1c736abc352e27231e046ea249be5a51f3b3f4d7.tar.gz
nextcloud-server-1c736abc352e27231e046ea249be5a51f3b3f4d7.zip
Don't die with LockedException when removing/restoring multiple files from trash
fixes issue #16491 Signed-off-by: Sven Strickroth <email@cs-ware.de>
Diffstat (limited to 'apps/files_trashbin/lib')
-rw-r--r--apps/files_trashbin/lib/Trashbin.php17
1 files changed, 14 insertions, 3 deletions
diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php
index 0e16c56ed8d..6aec2f9821e 100644
--- a/apps/files_trashbin/lib/Trashbin.php
+++ b/apps/files_trashbin/lib/Trashbin.php
@@ -968,9 +968,20 @@ class Trashbin {
[$storage,] = $view->resolvePath('/');
//force rescan of versions, local storage may not have updated the cache
- if (!self::$scannedVersions) {
- $storage->getScanner()->scan('files_trashbin/versions');
- self::$scannedVersions = true;
+ $waitstart = time();
+ while (!self::$scannedVersions) {
+ try {
+ $storage->getScanner()->scan('files_trashbin/versions');
+ self::$scannedVersions = true;
+ } catch (LockedException $e) {
+ /* a concurrent remove/restore from trash occurred,
+ * retry with a maximum wait time of approx. 15 seconds
+ */
+ if (time() - $waitstart > 15) {
+ throw $e;
+ }
+ usleep(50000 + rand(0, 10000));
+ }
}
$pattern = \OC::$server->getDatabaseConnection()->escapeLikeParameter(basename($filename));