our current infrastructure will cause a deadlock for any hydration
requests coming from desktop files client itself
the main thread is responsible for executing the hydration request but
if the same thread is already blocked waiting for the hydration to
happen, both (open system call and hydration request handling) process
will never be completed and wait for each over in a stuck cycle
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
callbackInfo->FileSize.QuadPart);
};
+ if (QCoreApplication::applicationPid() == callbackInfo->ProcessInfo->ProcessId) {
+ qCCritical(lcCfApiWrapper) << "implicit hydration triggered by the client itself. Will lead to a deadlock. Cancel";
+ sendTransferError();
+ return;
+ }
+
auto vfs = reinterpret_cast<OCC::VfsCfApi *>(callbackInfo->CallbackContext);
Q_ASSERT(vfs->metaObject()->className() == QByteArrayLiteral("OCC::VfsCfApi"));
const auto path = QString(QString::fromWCharArray(callbackInfo->VolumeDosName) + QString::fromWCharArray(callbackInfo->NormalizedPath));