HolderType borrowObject() { #ifdef MAPNIK_THREADSAFE mutex::scoped_lock lock(mutex_); #endif typename ContType::iterator itr=unusedPool_.begin(); if (itr!=unusedPool_.end()) { #ifdef MAPNIK_DEBUG std::clog<<"borrow "<<(*itr).get()<<"\n"; #endif usedPool_.push_back(*itr); itr=unusedPool_.erase(itr); return usedPool_[usedPool_.size()-1]; } else if (unusedPool_.size() < maxSize_) { HolderType conn(creator_()); if (conn->isOK()) { usedPool_.push_back(conn); #ifdef MAPNIK_DEBUG std::clog << "create << " << conn.get() << "\n"; #endif return conn; } } return HolderType(); }
std::pair<unsigned,unsigned> size() const { #ifdef MAPNIK_THREADSAFE mutex::scoped_lock lock(mutex_); #endif std::pair<unsigned,unsigned> size(unusedPool_.size(),usedPool_.size()); return size; }
HolderType borrowObject() { #ifdef MAPNIK_THREADSAFE mapnik::scoped_lock lock(mutex_); #endif typename ContType::iterator itr=pool_.begin(); while ( itr!=pool_.end()) { if (!itr->unique()) { ++itr; } else if ((*itr)->isOK()) { return *itr; } else { itr=pool_.erase(itr); } } // all connection have been taken, check if we allowed to grow pool if (pool_.size() < maxSize_) { HolderType conn(creator_()); if (conn->isOK()) { pool_.push_back(conn); return conn; } } return HolderType(); }
unsigned size() const { #ifdef MAPNIK_THREADSAFE mapnik::scoped_lock lock(mutex_); #endif return pool_.size(); }
void set_initial_size(unsigned size) { #ifdef MAPNIK_THREADSAFE mapnik::scoped_lock lock(mutex_); #endif if (size > initialSize_) { initialSize_ = size; unsigned total_size = pool_.size(); // ensure we don't have ghost obj's in the pool. if (total_size < initialSize_) { unsigned grow_size = initialSize_ - total_size ; for (unsigned i=0; i < grow_size; ++i) { HolderType conn(creator_()); if (conn->isOK()) pool_.push_back(conn); } } } }