Fix mempool merge conflict.
diff --git a/heron/common/src/cpp/basics/mempool.cpp b/heron/common/src/cpp/basics/mempool.cpp
index d581806..5705f8c 100644
--- a/heron/common/src/cpp/basics/mempool.cpp
+++ b/heron/common/src/cpp/basics/mempool.cpp
@@ -17,7 +17,6 @@
////////////////////////////////////////////////////////////////////////////////
// Just defines the static member of Mempool class
////////////////////////////////////////////////////////////////////////////////
-#include "basics/mempool.h"
#include "basics/basics.h"
#include "glog/logging.h"
diff --git a/heron/common/src/cpp/basics/mempool.h b/heron/common/src/cpp/basics/mempool.h
index eb3ff7e..fd7de19 100644
--- a/heron/common/src/cpp/basics/mempool.h
+++ b/heron/common/src/cpp/basics/mempool.h
@@ -21,34 +21,7 @@
#include <unordered_map>
#include <mutex>
#include <typeindex>
-
-template<typename T>
-class BaseMemPool {
- public:
- template<class... Args>
- T* acquire(Args&&... args) {
- if (pool_.empty()) {
- return new T(std::forward<Args>(args)...);
- }
- T* t = pool_.back();
- pool_.pop_back();
- return t;
- }
- void release(T* t) {
- pool_.push_back(t);
- }
- BaseMemPool() {
- }
- ~BaseMemPool() {
- for (auto& p : pool_) {
- delete p;
- }
- pool_.clear();
- }
- private:
- std::vector<T*> pool_;
-};
-
+#include "basics/basics.h"
template<typename B>
class MemPool {
@@ -56,21 +29,25 @@
MemPool() {
}
+ explicit MemPool(sp_int32 _pool_limit) :
+ pool_limit_(_pool_limit) {
+ }
+
// TODO(cwang): we have a memory leak here.
~MemPool() {
- for (auto& m : map_) {
- for (auto& n : m.second) {
- delete n;
+ for (auto& map_iter : mem_pool_map_) {
+ for (auto& mem_pool : map_iter.second) {
+ delete mem_pool;
}
- m.second.clear();
+ map_iter.second.clear();
}
- map_.clear();
+ mem_pool_map_.clear();
}
template<typename M>
M* acquire(M* m) {
std::type_index type = typeid(M);
- std::vector<B*>& pool = map_[type];
+ std::vector<B*>& pool = mem_pool_map_[type];
if (pool.empty()) {
return new M();
@@ -83,7 +60,6 @@
template<typename M>
void release(M* ptr) {
std::type_index type = typeid(M);
- map_[type].push_back(static_cast<B*>(ptr));
sp_int32 size = mem_pool_map_[type].size();
// if pool size reaches the limit, release the memory
// otherwise put the memory into pool
@@ -111,7 +87,9 @@
template<typename T>
T* __global_protobuf_pool_acquire__(T* _m) {
std::lock_guard<std::mutex> guard(__global_protobuf_pool_mutex__);
- return __global_protobuf_pool__->acquire(_m);
+ T* t = __global_protobuf_pool__->acquire(_m);
+ t->Clear();
+ return t;
}
template<typename T>