mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
7697a170be
Summary: I want to make EdenMount robust if mounting and unmounting are requested concurrently. This will make it safer to call EdenMount::destroy in different situations. Take a step toward that goal by making EdenMount::unmount succeed if EdenMount::startFuse was never called. Changed behaviors: * If neither EdenMount::startFuse nor EdenMount::takeoverFuse was never called, EdenMount::unmount succeeds and does not call PrivHelper::fuseUnmount. * **Old behavior**: EdenMount::unmount fails with an exception from PrivHelper. Unchanged behaviors: * If EdenMount::unmount was ever called, EdenMount::startFuse fails with EdenMountCancelled. * If EdenMount::unmount was ever called, EdenMount::takeoverFuse fails with EdenMountCancelled. * If EdenMount::startFuse is in progress, EdenMount::unmount causes the concurrent startFuse call to fail with FuseDeviceUnmountedDuringInitialization. * If EdenMount::startFuse -> PrivHelper::fuseMount is in progress, EdenMount::unmount waits for fuseMount to finish before calling PrivHelper::fuseUnmount. * If EdenMount::startFuse -> PrivHelper::fuseMount is complete, EdenMount::unmount calls PrivHelper::fuseUnmount immediately. * If EdenMount::takeoverFuse is in progress, EdenMount::unmount does not cause EdenMount::takeoverFuse to fail. * if EdenMount::takeoverFuse was called, EdenMount::unmount calls PrivHelper::fuseUnmount immediately. * If EdenMount::unmount is called multiple times, one of the calls succeeds, and the remaining calls to unmount fail with an exception from PrivHelper. Reviewed By: simpkins Differential Revision: D14398537 fbshipit-source-id: 9209aad8b2980045fd0f89a5ba149a833579c2cf |
||
---|---|---|
.. | ||
benchharness | ||
config | ||
fuse | ||
inodes | ||
journal | ||
model | ||
rocksdb | ||
service | ||
sqlite | ||
store | ||
takeover | ||
testharness | ||
tracing | ||
utils | ||
CMakeLists.txt |