/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include namespace facebook::react { /** * This is a RAII class that locks the shadow tree revisions during its * lifetime. * * @example * { * ScopedShadowTreeRevisionLock lock(consistencyManager); * runJavaScriptTask(); // During this execution, the lock will be active. * } */ class ScopedShadowTreeRevisionLock { public: explicit ScopedShadowTreeRevisionLock(ShadowTreeRevisionConsistencyManager *consistencyManager) noexcept : consistencyManager_(consistencyManager) { if (consistencyManager_ != nullptr) { consistencyManager_->lockRevisions(); } } // Non-movable ScopedShadowTreeRevisionLock(const ScopedShadowTreeRevisionLock &) = delete; ScopedShadowTreeRevisionLock(ScopedShadowTreeRevisionLock &&) = delete; // Non-copyable ScopedShadowTreeRevisionLock &operator=(const ScopedShadowTreeRevisionLock &) = delete; ScopedShadowTreeRevisionLock &operator=(ScopedShadowTreeRevisionLock &&) = delete; ~ScopedShadowTreeRevisionLock() noexcept { if (consistencyManager_ != nullptr) { consistencyManager_->unlockRevisions(); } } private: ShadowTreeRevisionConsistencyManager *consistencyManager_; }; } // namespace facebook::react