fix: only refresh mounts once per user

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2026-01-15 18:12:44 +01:00
parent a6d1fa1fa6
commit f5d7a44dca

View file

@ -72,6 +72,8 @@ class SetupManager implements ISetupManager {
private array $setupUsers = [];
// List of users for which all mounts are setup
private array $setupUsersComplete = [];
// List of users for which we've already refreshed the non-authoritative mounts
private array $usersMountsUpdated = [];
/**
* An array of provider classes that have been set up, indexed by UserUID.
*
@ -237,6 +239,10 @@ class SetupManager implements ISetupManager {
* Update the cached mounts for all non-authoritative mount providers for a user.
*/
private function updateNonAuthoritativeProviders(IUser $user): void {
if (isset($this->usersMountsUpdated[$user->getUID()])) {
return;
}
// prevent recursion loop from when getting mounts from providers ends up setting up the filesystem
static $updatingProviders = false;
if ($updatingProviders) {
@ -257,6 +263,7 @@ class SetupManager implements ISetupManager {
$mount = $this->mountProviderCollection->getUserMountsForProviderClasses($user, $providerNames);
$this->userMountCache->registerMounts($user, $mount, $providerNames);
$this->usersMountsUpdated[$user->getUID()] = true;
$updatingProviders = false;
}
@ -726,6 +733,7 @@ class SetupManager implements ISetupManager {
$this->setupUserMountProviders = [];
$this->setupMountProviderPaths = [];
$this->fullSetupRequired = [];
$this->usersMountsUpdated = [];
$this->rootSetup = false;
$this->mountManager->clear();
$this->userMountCache->clear();