diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 8e9a0f4122..92900ccda6 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -319,10 +319,15 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } public function getPropagator($storage = null) { + if (isset($this->propagator)) { + return $this->propagator; + } + if (!$storage) { $storage = $this; } - return new \OCA\Files_Sharing\SharedPropagator($storage, \OC::$server->getDatabaseConnection()); + $this->propagator = new \OCA\Files_Sharing\SharedPropagator($storage, \OC::$server->getDatabaseConnection()); + return $this->propagator; } public function getOwner($path) { diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php index f672cc7574..d26c601be1 100644 --- a/lib/private/Files/Utils/Scanner.php +++ b/lib/private/Files/Utils/Scanner.php @@ -139,9 +139,10 @@ class Scanner extends PublicEmitter { $this->triggerPropagator($storage, $path); }); - $storage->getPropagator()->beginBatch(); + $propagator = $storage->getPropagator(); + $propagator->beginBatch(); $scanner->backgroundScan(); - $storage->getPropagator()->commitBatch(); + $propagator->commitBatch(); } } @@ -190,14 +191,15 @@ class Scanner extends PublicEmitter { $this->db->beginTransaction(); } try { - $storage->getPropagator()->beginBatch(); + $propagator = $storage->getPropagator(); + $propagator->beginBatch(); $scanner->scan($relativePath, \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE); $cache = $storage->getCache(); if ($cache instanceof Cache) { // only re-calculate for the root folder we scanned, anything below that is taken care of by the scanner $cache->correctFolderSize($relativePath); } - $storage->getPropagator()->commitBatch(); + $propagator->commitBatch(); } catch (StorageNotAvailableException $e) { $this->logger->error('Storage ' . $storage->getId() . ' not available'); $this->logger->logException($e);