From 25aa12643351c69b3a5afff481aa29583acf1472 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期六, 01 四月 2017 15:32:29 +0800
Subject: [PATCH]
---
RtspFace/PipeLinePool.cpp | 37 +++++++++++++++++++++----------------
1 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/RtspFace/PipeLinePool.cpp b/RtspFace/PipeLinePool.cpp
index f02eef1..d003a48 100644
--- a/RtspFace/PipeLinePool.cpp
+++ b/RtspFace/PipeLinePool.cpp
@@ -6,7 +6,7 @@
int ret = pthread_mutex_lock((pthread_mutex_t*)mut); \
if(ret != 0) \
{ \
- LOG_ERROR << "pthread_mutex_lock " << #mut << ": " << ret; \
+ LOG_ERROR << "pthread_mutex_lock " << #mut << ": " << ret << std::endl; \
return _ret; \
} \
}
@@ -15,10 +15,23 @@
int ret = pthread_mutex_unlock((pthread_mutex_t*)mut); \
if(ret != 0) \
{ \
- LOG_ERROR << "pthread_mutex_unlock " << #mut << ": " << ret; \
+ LOG_ERROR << "pthread_mutex_unlock " << #mut << ": " << ret << std::endl; \
return _ret; \
} \
}
+
+struct MutexLocker
+{
+ pthread_mutex_t* mut;
+ MutexLocker(void* _mut) : mut((pthread_mutex_t*)_mut)
+ {
+ PLP_MUTEX_LOCK(mut,);
+ }
+ ~MutexLocker()
+ {
+ PLP_MUTEX_UNLOCK(mut,);
+ }
+};
PipeLinePool::PipeLinePool(bool _multithread_safe) :
multithread_safe(_multithread_safe), tsafe_mutex(nullptr), pl_mutex(nullptr),
@@ -32,6 +45,7 @@
pl_mutex = new pthread_mutex_t;
pthread_mutex_init((pthread_mutex_t*)pl_mutex, NULL);
+ // in ctor pool is empty
PLP_MUTEX_LOCK(pl_mutex,);
}
}
@@ -64,31 +78,26 @@
if (pl == nullptr)
return;
- PLP_MUTEX_LOCK(tsafe_mutex,);
+ MutexLocker _ml(tsafe_mutex);
if (pipelines.find(pl) != pipelines.end())
return;
pipelines.insert(pl);
pipelines_free.insert(pl);
-
- PLP_MUTEX_UNLOCK(tsafe_mutex,);
}
void PipeLinePool::unmanage(PipeLine* pl)
{
- PLP_MUTEX_LOCK(tsafe_mutex,);
+ MutexLocker _ml(tsafe_mutex);
pipelines.erase(pl);
pipelines_free.erase(pl);
-
- PLP_MUTEX_UNLOCK(tsafe_mutex,);
}
PipeLine* PipeLinePool::get_free()
{
-
- PLP_MUTEX_LOCK(tsafe_mutex, nullptr);
+ MutexLocker _ml(tsafe_mutex);
if (pipelines_free.empty())
return nullptr;
@@ -97,23 +106,19 @@
PipeLine* pl = *iter;
pipelines_free.erase(iter);
- PLP_MUTEX_UNLOCK(tsafe_mutex, nullptr);
-
return pl;
}
void PipeLinePool::release(PipeLine* pl)
{
+ MutexLocker _ml(tsafe_mutex);
+
if (pipelines.find(pl) == pipelines.end())
return;
if (pipelines_free.find(pl) != pipelines.end())
return;
- PLP_MUTEX_LOCK(tsafe_mutex,);
-
pipelines_free.insert(pl);
-
- PLP_MUTEX_UNLOCK(tsafe_mutex,);
}
bool PipeLinePool::wait_free()
--
Gitblit v1.8.0