From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- mozglue/misc/RWLock_windows.cpp | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 mozglue/misc/RWLock_windows.cpp (limited to 'mozglue/misc/RWLock_windows.cpp') diff --git a/mozglue/misc/RWLock_windows.cpp b/mozglue/misc/RWLock_windows.cpp new file mode 100644 index 0000000000..2c347f218c --- /dev/null +++ b/mozglue/misc/RWLock_windows.cpp @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef XP_WIN +# error This file should only be compiled on Windows. +#endif + +#include "mozilla/PlatformRWLock.h" + +#include + +#define NativeHandle(m) (reinterpret_cast(&m)) + +mozilla::detail::RWLockImpl::RWLockImpl() { + static_assert(sizeof(SRWLOCK) <= sizeof(mRWLock), "SRWLOCK is too big!"); + InitializeSRWLock(NativeHandle(mRWLock)); +} + +mozilla::detail::RWLockImpl::~RWLockImpl() {} + +bool mozilla::detail::RWLockImpl::tryReadLock() { + return TryAcquireSRWLockShared(NativeHandle(mRWLock)); +} + +void mozilla::detail::RWLockImpl::readLock() { + AcquireSRWLockShared(NativeHandle(mRWLock)); +} + +void mozilla::detail::RWLockImpl::readUnlock() { + ReleaseSRWLockShared(NativeHandle(mRWLock)); +} + +bool mozilla::detail::RWLockImpl::tryWriteLock() { + return TryAcquireSRWLockExclusive(NativeHandle(mRWLock)); +} + +void mozilla::detail::RWLockImpl::writeLock() { + AcquireSRWLockExclusive(NativeHandle(mRWLock)); +} + +void mozilla::detail::RWLockImpl::writeUnlock() { + ReleaseSRWLockExclusive(NativeHandle(mRWLock)); +} + +#undef NativeHandle -- cgit v1.2.3