diff --git a/trunk/configure b/trunk/configure index 86cf95eed..5be1d5f3e 100755 --- a/trunk/configure +++ b/trunk/configure @@ -199,7 +199,7 @@ MODULE_ID="CORE" MODULE_DEPENDS=() ModuleLibIncs=(${SRS_OBJS_DIR}) MODULE_FILES=("srs_core" "srs_core_version5" "srs_core_autofree" "srs_core_performance" - "srs_core_time" "srs_core_platform") + "srs_core_time" "srs_core_platform" "srs_core_lock") CORE_INCS="src/core"; MODULE_DIR=${CORE_INCS} . auto/modules.sh CORE_OBJS="${MODULE_OBJS[@]}" # diff --git a/trunk/src/core/srs_core_lock.cpp b/trunk/src/core/srs_core_lock.cpp new file mode 100644 index 000000000..a2da00e24 --- /dev/null +++ b/trunk/src/core/srs_core_lock.cpp @@ -0,0 +1,8 @@ +// +// Copyright (c) 2013-2021 The SRS Authors +// +// SPDX-License-Identifier: MIT or MulanPSL-2.0 +// + +#include + diff --git a/trunk/src/core/srs_core_lock.hpp b/trunk/src/core/srs_core_lock.hpp new file mode 100644 index 000000000..3eb1c1d3c --- /dev/null +++ b/trunk/src/core/srs_core_lock.hpp @@ -0,0 +1,57 @@ +// +// Copyright (c) 2013-2021 The SRS Authors +// +// SPDX-License-Identifier: MIT or MulanPSL-2.0 +// + +#ifndef SRS_CORE_LOCK_HPP +#define SRS_CORE_LOCK_HPP + +#include + +#include + +#include + +class SrsScopeLock +{ +private: + pthread_mutex_t* mutex_; + bool locked_; + +public: + explicit SrsScopeLock(pthread_mutex_t* mutex) + { + mutex_ = mutex; + locked_ = false; + + lock(); + } + + ~SrsScopeLock() + { + unlock(); + } + + void lock() + { + if (locked_) { + return; + } + + locked_ = true; + pthread_mutex_lock(mutex_); + } + + void unlock() + { + if (! locked_) { + return; + } + + locked_ = false; + pthread_mutex_unlock(mutex_); + } +}; + +#endif