diff --git a/include/mapnik/pool.hpp b/include/mapnik/pool.hpp index da735bae4..3341da403 100644 --- a/include/mapnik/pool.hpp +++ b/include/mapnik/pool.hpp @@ -39,6 +39,7 @@ #include #include #include +#include namespace mapnik { @@ -71,7 +72,7 @@ class Pool : private boost::noncopyable typedef std::deque ContType; Creator creator_; - const unsigned initialSize_; + unsigned initialSize_; unsigned maxSize_; ContType usedPool_; ContType unusedPool_; @@ -174,7 +175,38 @@ public: #ifdef MAPNIK_THREADSAFE mutex::scoped_lock lock(mutex_); #endif - maxSize_ = size; + maxSize_ = std::max(maxSize_,size); + } + + unsigned initial_size() const + { +#ifdef MAPNIK_THREADSAFE + mutex::scoped_lock lock(mutex_); +#endif + return initialSize_; + } + + void set_initial_size(unsigned size) + { +#ifdef MAPNIK_THREADSAFE + mutex::scoped_lock lock(mutex_); +#endif + if (size > initialSize_) + { + initialSize_ = size; + unsigned total_size = usedPool_.size() + unusedPool_.size(); + if (total_size < initialSize_) + { + unsigned grow_size = initialSize_ - total_size ; + + for (unsigned i=0; i < grow_size; ++i) + { + HolderType conn(creator_()); + if (conn->isOK()) + unusedPool_.push_back(conn); + } + } + } } }; diff --git a/plugins/input/postgis/connection_manager.hpp b/plugins/input/postgis/connection_manager.hpp index 32bc66d8d..2354da799 100644 --- a/plugins/input/postgis/connection_manager.hpp +++ b/plugins/input/postgis/connection_manager.hpp @@ -122,8 +122,8 @@ public: if (itr != pools_.end()) { - unsigned cur_size = itr->second->max_size(); - itr->second->set_max_size(std::max(maxSize, cur_size)); + itr->second->set_max_size(initialSize); + itr->second->set_max_size(maxSize); } else {