Merge pull request #6892 from nextcloud/bugfix/avoid-freeze-vfs-settings

Fix permanent freeze upon opening macOS VFS settings
This commit is contained in:
Claudio Cambra 2024-07-09 18:09:41 +08:00 committed by GitHub
commit ba155beee5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -20,6 +20,10 @@
#include "gui/macOS/fileproviderdomainmanager.h"
#include "gui/macOS/fileproviderxpc_mac_utils.h"
namespace {
constexpr int64_t semaphoreWaitDelta = 3000000000; // 3 seconds
}
namespace OCC::Mac {
Q_LOGGING_CATEGORY(lcFileProviderXPC, "nextcloud.gui.macos.fileprovider.xpc", QtInfoMsg)
@ -148,13 +152,19 @@ std::optional<std::pair<bool, bool>> FileProviderXPC::fastEnumerationStateForExt
__block BOOL receivedFastEnumerationEnabled; // What is the value of the setting being used by the extension?
__block BOOL receivedFastEnumerationSet; // Has the setting been set by the user?
__block BOOL receivedResponse = NO;
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[service getFastEnumerationStateWithCompletionHandler:^(BOOL enabled, BOOL set) {
receivedFastEnumerationEnabled = enabled;
receivedFastEnumerationSet = set;
receivedResponse = YES;
dispatch_semaphore_signal(semaphore);
}];
dispatch_wait(semaphore, DISPATCH_TIME_FOREVER);
dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, semaphoreWaitDelta));
if (!receivedResponse) {
qCWarning(lcFileProviderXPC) << "Did not receive response for fast enumeration state";
return std::nullopt;
}
return std::optional<std::pair<bool, bool>>{{receivedFastEnumerationEnabled, receivedFastEnumerationSet}};
}