Skip to content

Commit

Permalink
Make the memory manager less complain happy, by imploying exponential…
Browse files Browse the repository at this point in the history
… warning strategy
  • Loading branch information
antialize committed Sep 18, 2012
1 parent a2eae12 commit d98736e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 5 deletions.
13 changes: 8 additions & 5 deletions tpie/memory.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ inline void segfault() {


memory_manager * mm = 0; memory_manager * mm = 0;


memory_manager::memory_manager(): m_used(0), m_limit(0), m_maxExceeded(0), m_enforce(ENFORCE_WARN) {} memory_manager::memory_manager(): m_used(0), m_limit(0), m_maxExceeded(0), m_enforce(ENFORCE_WARN), m_nextWarning(0) {}


size_t memory_manager::available() const throw() { size_t memory_manager::available() const throw() {
size_t used = m_used; size_t used = m_used;
Expand Down Expand Up @@ -69,10 +69,13 @@ void memory_manager::register_allocation(size_t bytes) {
m_used += bytes; m_used += bytes;
if (m_used > m_limit && m_used - m_limit > m_maxExceeded && m_limit > 0) { if (m_used > m_limit && m_used - m_limit > m_maxExceeded && m_limit > 0) {
m_maxExceeded = m_used - m_limit; m_maxExceeded = m_used - m_limit;
lock.unlock(); if (m_maxExceeded >= m_nextWarning) {
log_warning() << "Memory limit exceeded by " << m_maxExceeded m_nextWarning = m_maxExceeded + m_maxExceeded/8;
<< " bytes, while trying to allocate " << bytes << " bytes." lock.unlock();
<< " Limit is " << m_limit << ", but " << m_used << " would be used. " << std::endl; log_warning() << "Memory limit exceeded by " << m_maxExceeded
<< " bytes, while trying to allocate " << bytes << " bytes."
<< " Limit is " << m_limit << ", but " << m_used << " would be used. " << std::endl;
}
} }
}; };
} }
Expand Down
1 change: 1 addition & 0 deletions tpie/memory.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ class memory_manager {
size_t m_used; size_t m_used;
size_t m_limit; size_t m_limit;
size_t m_maxExceeded; size_t m_maxExceeded;
size_t m_nextWarning;
enforce_t m_enforce; enforce_t m_enforce;
boost::mutex m_mutex; boost::mutex m_mutex;
#ifndef TPIE_NDEBUG #ifndef TPIE_NDEBUG
Expand Down

0 comments on commit d98736e

Please sign in to comment.