From 3d505b2b5f6cf6a8c3475a40991d7d1f8ef75365 Mon Sep 17 00:00:00 2001
From: Loic Blot <loic.blot@unix-experience.fr>
Date: Thu, 5 Mar 2015 16:20:56 +0100
Subject: [PATCH] Use std::queue for HTTPFetchRequest and std::vector for
 log_output instead of std::list

---
 src/httpfetch.cpp | 16 ++++++++--------
 src/log.cpp       | 33 +++++++++++++++------------------
 2 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp
index 981643f6c..e6886f652 100644
--- a/src/httpfetch.cpp
+++ b/src/httpfetch.cpp
@@ -37,7 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "settings.h"
 
 JMutex g_httpfetch_mutex;
-std::map<unsigned long, std::list<HTTPFetchResult> > g_httpfetch_results;
+std::map<unsigned long, std::queue<HTTPFetchResult> > g_httpfetch_results;
 
 HTTPFetchRequest::HTTPFetchRequest()
 {
@@ -57,7 +57,7 @@ static void httpfetch_deliver_result(const HTTPFetchResult &fetch_result)
 	unsigned long caller = fetch_result.caller;
 	if (caller != HTTPFETCH_DISCARD) {
 		JMutexAutoLock lock(g_httpfetch_mutex);
-		g_httpfetch_results[caller].push_back(fetch_result);
+		g_httpfetch_results[caller].push(fetch_result);
 	}
 }
 
@@ -70,11 +70,11 @@ unsigned long httpfetch_caller_alloc()
 	// Check each caller ID except HTTPFETCH_DISCARD
 	const unsigned long discard = HTTPFETCH_DISCARD;
 	for (unsigned long caller = discard + 1; caller != discard; ++caller) {
-		std::map<unsigned long, std::list<HTTPFetchResult> >::iterator
+		std::map<unsigned long, std::queue<HTTPFetchResult> >::iterator
 			it = g_httpfetch_results.find(caller);
 		if (it == g_httpfetch_results.end()) {
-			verbosestream<<"httpfetch_caller_alloc: allocating "
-					<<caller<<std::endl;
+			verbosestream << "httpfetch_caller_alloc: allocating "
+					<< caller << std::endl;
 			// Access element to create it
 			g_httpfetch_results[caller];
 			return caller;
@@ -102,19 +102,19 @@ bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result)
 	JMutexAutoLock lock(g_httpfetch_mutex);
 
 	// Check that caller exists
-	std::map<unsigned long, std::list<HTTPFetchResult> >::iterator
+	std::map<unsigned long, std::queue<HTTPFetchResult> >::iterator
 		it = g_httpfetch_results.find(caller);
 	if (it == g_httpfetch_results.end())
 		return false;
 
 	// Check that result queue is nonempty
-	std::list<HTTPFetchResult> &caller_results = it->second;
+	std::queue<HTTPFetchResult> &caller_results = it->second;
 	if (caller_results.empty())
 		return false;
 
 	// Pop first result
 	fetch_result = caller_results.front();
-	caller_results.pop_front();
+	caller_results.pop();
 	return true;
 }
 
diff --git a/src/log.cpp b/src/log.cpp
index 85c827597..398c89eb0 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <sstream>
 #include <algorithm>
 #include "threads.h"
+#include "jthread/jmutexautolock.h"
 #include "debug.h"
 #include "gettime.h"
 #include "porting.h"
@@ -38,7 +39,7 @@ unsigned int android_log_level_mapping[] = {
 	};
 #endif
 
-std::list<ILogOutput*> log_outputs[LMT_NUM_VALUES];
+std::vector<ILogOutput*> log_outputs[LMT_NUM_VALUES];
 std::map<threadid_t, std::string> log_threadnames;
 JMutex                            log_threadnamemutex;
 
@@ -62,7 +63,7 @@ void log_add_output_all_levs(ILogOutput *out)
 void log_remove_output(ILogOutput *out)
 {
 	for(int i=0; i<LMT_NUM_VALUES; i++){
-		std::list<ILogOutput*>::iterator it =
+		std::vector<ILogOutput*>::iterator it =
 				std::find(log_outputs[i].begin(), log_outputs[i].end(), out);
 		if(it != log_outputs[i].end())
 			log_outputs[i].erase(it);
@@ -71,33 +72,29 @@ void log_remove_output(ILogOutput *out)
 
 void log_set_lev_silence(enum LogMessageLevel lev, bool silence)
 {
-	log_threadnamemutex.Lock();
+	JMutexAutoLock lock(log_threadnamemutex);
 
-	for (std::list<ILogOutput *>::iterator
-			it = log_outputs[lev].begin();
-			it != log_outputs[lev].end();
-			++it) {
+	for (std::vector<ILogOutput *>::iterator it = log_outputs[lev].begin();
+			it != log_outputs[lev].end(); ++it) {
 		ILogOutput *out = *it;
 		out->silence = silence;
 	}
-
-	log_threadnamemutex.Unlock();
 }
 
 void log_register_thread(const std::string &name)
 {
 	threadid_t id = get_current_thread_id();
-	log_threadnamemutex.Lock();
+	JMutexAutoLock lock(log_threadnamemutex);
+
 	log_threadnames[id] = name;
-	log_threadnamemutex.Unlock();
 }
 
 void log_deregister_thread()
 {
 	threadid_t id = get_current_thread_id();
-	log_threadnamemutex.Lock();
+	JMutexAutoLock lock(log_threadnamemutex);
+
 	log_threadnames.erase(id);
-	log_threadnamemutex.Unlock();
 }
 
 static std::string get_lev_string(enum LogMessageLevel lev)
@@ -119,7 +116,7 @@ static std::string get_lev_string(enum LogMessageLevel lev)
 
 void log_printline(enum LogMessageLevel lev, const std::string &text)
 {
-	log_threadnamemutex.Lock();
+	JMutexAutoLock lock(log_threadnamemutex);
 	std::string threadname = "(unknown thread)";
 	std::map<threadid_t, std::string>::const_iterator i;
 	i = log_threadnames.find(get_current_thread_id());
@@ -127,9 +124,10 @@ void log_printline(enum LogMessageLevel lev, const std::string &text)
 		threadname = i->second;
 	std::string levelname = get_lev_string(lev);
 	std::ostringstream os(std::ios_base::binary);
-	os<<getTimestamp()<<": "<<levelname<<"["<<threadname<<"]: "<<text;
-	for(std::list<ILogOutput*>::iterator i = log_outputs[lev].begin();
-			i != log_outputs[lev].end(); i++){
+	os << getTimestamp() << ": " << levelname << "["<<threadname<<"]: " << text;
+
+	for(std::vector<ILogOutput*>::iterator i = log_outputs[lev].begin();
+			i != log_outputs[lev].end(); i++) {
 		ILogOutput *out = *i;
 		if (out->silence)
 			continue;
@@ -138,7 +136,6 @@ void log_printline(enum LogMessageLevel lev, const std::string &text)
 		out->printLog(os.str(), lev);
 		out->printLog(lev, text);
 	}
-	log_threadnamemutex.Unlock();
 }
 
 class Logbuf : public std::streambuf
-- 
GitLab