mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
SRT: Refine the lock for log.
This commit is contained in:
parent
910b5945af
commit
0957cdb944
9 changed files with 88 additions and 90 deletions
|
@ -63,10 +63,10 @@ RUN cd /srs/trunk && ./configure --jobs=2 --srt=on && make -j2
|
|||
########################################################
|
||||
FROM ossrs/srs:ubuntu16 AS ubuntu16-cross-armv7
|
||||
COPY . /srs
|
||||
RUN cd /srs/trunk && ./configure --jobs=2 --cross-build --cc=arm-linux-gnueabihf-gcc --cxx=arm-linux-gnueabihf-g++ \
|
||||
RUN cd /srs/trunk && ./configure --jobs=2 --srt=off --cross-build --cc=arm-linux-gnueabihf-gcc --cxx=arm-linux-gnueabihf-g++ \
|
||||
--ar=arm-linux-gnueabihf-ar --ld=arm-linux-gnueabihf-ld --randlib=arm-linux-gnueabihf-randlib && make -j2
|
||||
|
||||
FROM ossrs/srs:ubuntu16 AS ubuntu16-cross-aarch64
|
||||
COPY . /srs
|
||||
RUN cd /srs/trunk && ./configure --jobs=2 --cross-build --cc=aarch64-linux-gnu-gcc --cxx=aarch64-linux-gnu-g++ \
|
||||
RUN cd /srs/trunk && ./configure --jobs=2 --srt=off --cross-build --cc=aarch64-linux-gnu-gcc --cxx=aarch64-linux-gnu-g++ \
|
||||
--ar=aarch64-linux-gnu-ar --ld=aarch64-linux-gnu-ld --randlib=aarch64-linux-gnu-randlib && make -j2
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
help=no
|
||||
# feature options
|
||||
SRS_HDS=NO
|
||||
SRS_SRT=NO
|
||||
SRS_SRT=YES
|
||||
SRS_RTC=YES
|
||||
SRS_CXX11=YES
|
||||
SRS_CXX14=NO
|
||||
|
|
2
trunk/configure
vendored
2
trunk/configure
vendored
|
@ -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_lock")
|
||||
"srs_core_time" "srs_core_platform")
|
||||
CORE_INCS="src/core"; MODULE_DIR=${CORE_INCS} . auto/modules.sh
|
||||
CORE_OBJS="${MODULE_OBJS[@]}"
|
||||
#
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <srs_kernel_error.hpp>
|
||||
#include <srs_app_utility.hpp>
|
||||
#include <srs_kernel_utility.hpp>
|
||||
#include <srs_core_lock.hpp>
|
||||
#include <srs_app_threads.hpp>
|
||||
|
||||
// the max size of a line of log.
|
||||
#define LOG_MAX_SIZE 8192
|
||||
|
@ -37,7 +37,7 @@ SrsFileLog::SrsFileLog()
|
|||
log_to_file_tank = false;
|
||||
utc = false;
|
||||
|
||||
pthread_mutex_init(&mutex_, NULL);
|
||||
mutex_ = new SrsMutex();
|
||||
}
|
||||
|
||||
SrsFileLog::~SrsFileLog()
|
||||
|
@ -53,7 +53,7 @@ SrsFileLog::~SrsFileLog()
|
|||
_srs_config->unsubscribe(this);
|
||||
}
|
||||
|
||||
pthread_mutex_destroy(&mutex_);
|
||||
srs_freep(mutex_);
|
||||
}
|
||||
|
||||
srs_error_t SrsFileLog::initialize()
|
||||
|
@ -84,95 +84,95 @@ void SrsFileLog::reopen()
|
|||
|
||||
void SrsFileLog::verbose(const char* tag, SrsContextId context_id, const char* fmt, ...)
|
||||
{
|
||||
SrsScopeLock sl(&mutex_);
|
||||
SrsAutoLock sl(mutex_);
|
||||
|
||||
if (level > SrsLogLevelVerbose) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int size = 0;
|
||||
if (!srs_log_header(log_data, LOG_MAX_SIZE, utc, false, tag, context_id, "Verb", &size)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
// we reserved 1 bytes for the new line.
|
||||
size += vsnprintf(log_data + size, LOG_MAX_SIZE - size, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
|
||||
write_log(fd, log_data, size, SrsLogLevelVerbose);
|
||||
}
|
||||
|
||||
void SrsFileLog::info(const char* tag, SrsContextId context_id, const char* fmt, ...)
|
||||
{
|
||||
SrsScopeLock sl(&mutex_);
|
||||
SrsAutoLock sl(mutex_);
|
||||
|
||||
if (level > SrsLogLevelInfo) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int size = 0;
|
||||
if (!srs_log_header(log_data, LOG_MAX_SIZE, utc, false, tag, context_id, "Debug", &size)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
// we reserved 1 bytes for the new line.
|
||||
size += vsnprintf(log_data + size, LOG_MAX_SIZE - size, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
|
||||
write_log(fd, log_data, size, SrsLogLevelInfo);
|
||||
}
|
||||
|
||||
void SrsFileLog::trace(const char* tag, SrsContextId context_id, const char* fmt, ...)
|
||||
{
|
||||
SrsScopeLock sl(&mutex_);
|
||||
SrsAutoLock sl(mutex_);
|
||||
|
||||
if (level > SrsLogLevelTrace) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int size = 0;
|
||||
if (!srs_log_header(log_data, LOG_MAX_SIZE, utc, false, tag, context_id, "Trace", &size)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
// we reserved 1 bytes for the new line.
|
||||
size += vsnprintf(log_data + size, LOG_MAX_SIZE - size, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
|
||||
write_log(fd, log_data, size, SrsLogLevelTrace);
|
||||
}
|
||||
|
||||
void SrsFileLog::warn(const char* tag, SrsContextId context_id, const char* fmt, ...)
|
||||
{
|
||||
SrsScopeLock sl(&mutex_);
|
||||
SrsAutoLock sl(mutex_);
|
||||
|
||||
if (level > SrsLogLevelWarn) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
int size = 0;
|
||||
if (!srs_log_header(log_data, LOG_MAX_SIZE, utc, true, tag, context_id, "Warn", &size)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
// we reserved 1 bytes for the new line.
|
||||
size += vsnprintf(log_data + size, LOG_MAX_SIZE - size, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
|
||||
write_log(fd, log_data, size, SrsLogLevelWarn);
|
||||
}
|
||||
|
||||
void SrsFileLog::error(const char* tag, SrsContextId context_id, const char* fmt, ...)
|
||||
{
|
||||
SrsScopeLock sl(&mutex_);
|
||||
SrsAutoLock sl(mutex_);
|
||||
|
||||
if (level > SrsLogLevelError) {
|
||||
return;
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#include <srs_app_reload.hpp>
|
||||
#include <srs_protocol_log.hpp>
|
||||
|
||||
class SrsMutex;
|
||||
|
||||
// For log TAGs.
|
||||
#define TAG_MAIN "MAIN"
|
||||
#define TAG_MAYBE "MAYBE"
|
||||
|
@ -41,7 +43,7 @@ private:
|
|||
bool utc;
|
||||
// TODO: FIXME: use macro define like SRS_MULTI_THREAD_LOG to switch enable log mutex or not.
|
||||
// Mutex for multithread log.
|
||||
pthread_mutex_t mutex_;
|
||||
SrsMutex* mutex_;
|
||||
public:
|
||||
SrsFileLog();
|
||||
virtual ~SrsFileLog();
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <srs_app_srt_source.hpp>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
|
@ -427,3 +428,38 @@ srs_error_t srs_thread_initialize()
|
|||
return err;
|
||||
}
|
||||
|
||||
SrsMutex::SrsMutex()
|
||||
{
|
||||
int rc = pthread_mutex_init(&mutex_, NULL);
|
||||
srs_assert(!rc);
|
||||
}
|
||||
|
||||
SrsMutex::~SrsMutex()
|
||||
{
|
||||
int rc = pthread_mutex_destroy(&mutex_);
|
||||
srs_assert(!rc);
|
||||
}
|
||||
|
||||
void SrsMutex::lock()
|
||||
{
|
||||
int rc = pthread_mutex_lock(&mutex_);
|
||||
srs_assert(!rc);
|
||||
}
|
||||
|
||||
void SrsMutex::unlock()
|
||||
{
|
||||
int rc = pthread_mutex_unlock(&mutex_);
|
||||
srs_assert(!rc);
|
||||
}
|
||||
|
||||
SrsAutoLock::SrsAutoLock(SrsMutex* mutex)
|
||||
{
|
||||
mutex_ = mutex;
|
||||
mutex_->lock();
|
||||
}
|
||||
|
||||
SrsAutoLock::~SrsAutoLock()
|
||||
{
|
||||
mutex_->unlock();
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
#include <srs_app_hourglass.hpp>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
// Protect server in high load.
|
||||
class SrsCircuitBreaker : public ISrsFastTimer
|
||||
{
|
||||
|
@ -49,5 +51,28 @@ extern SrsCircuitBreaker* _srs_circuit_breaker;
|
|||
// Initialize global or thread-local variables.
|
||||
extern srs_error_t srs_thread_initialize();
|
||||
|
||||
// Wrapper for mutex.
|
||||
class SrsMutex
|
||||
{
|
||||
private:
|
||||
pthread_mutex_t mutex_;
|
||||
public:
|
||||
SrsMutex();
|
||||
~SrsMutex();
|
||||
public:
|
||||
void lock();
|
||||
void unlock();
|
||||
};
|
||||
|
||||
// Lock the mutex when enter current scope, and unlock it when out.
|
||||
class SrsAutoLock
|
||||
{
|
||||
private:
|
||||
SrsMutex* mutex_;
|
||||
public:
|
||||
SrsAutoLock(SrsMutex* mutex);
|
||||
~SrsAutoLock();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2013-2021 The SRS Authors
|
||||
//
|
||||
// SPDX-License-Identifier: MIT or MulanPSL-2.0
|
||||
//
|
||||
|
||||
#include <srs_core_autofree.hpp>
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
//
|
||||
// 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 <pthread.h>
|
||||
|
||||
#include <srs_core.hpp>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
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
|
Loading…
Add table
Add a link
Reference in a new issue