// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "flutter/fml/platform/posix/shared_mutex_posix.h"
#include "flutter/fml/logging.h"

namespace fml {

SharedMutex* SharedMutex::Create() {
  return new SharedMutexPosix();
}

SharedMutexPosix::SharedMutexPosix() {
  FML_CHECK(pthread_rwlock_init(&rwlock_, nullptr) == 0);
}

void SharedMutexPosix::Lock() {
  pthread_rwlock_wrlock(&rwlock_);
}

void SharedMutexPosix::LockShared() {
  pthread_rwlock_rdlock(&rwlock_);
}

void SharedMutexPosix::Unlock() {
  pthread_rwlock_unlock(&rwlock_);
}

void SharedMutexPosix::UnlockShared() {
  pthread_rwlock_unlock(&rwlock_);
}

}  // namespace fml
