From 97dbd476ee99f36286cd866b2208ceead3019b31 Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 11 一月 2017 17:30:51 +0800
Subject: [PATCH] face daemon develop finish

---
 RtspFace/PipeLinePool.cpp |   33 +++++++++++++++++++--------------
 1 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/RtspFace/PipeLinePool.cpp b/RtspFace/PipeLinePool.cpp
index f02eef1..cba5a1b 100644
--- a/RtspFace/PipeLinePool.cpp
+++ b/RtspFace/PipeLinePool.cpp
@@ -20,6 +20,19 @@
 	} \
 }
 
+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), 
 	pipelines(), pipelines_free()
@@ -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