diff --git a/Builds/VisualStudio2012/beast.vcxproj b/Builds/VisualStudio2012/beast.vcxproj
index bd9f426edb..85fdc55d52 100644
--- a/Builds/VisualStudio2012/beast.vcxproj
+++ b/Builds/VisualStudio2012/beast.vcxproj
@@ -275,7 +275,6 @@
-
@@ -1017,12 +1016,6 @@
true
true
-
- true
- true
- true
- true
-
true
true
diff --git a/Builds/VisualStudio2012/beast.vcxproj.filters b/Builds/VisualStudio2012/beast.vcxproj.filters
index e4c94c5e86..0b307e9f47 100644
--- a/Builds/VisualStudio2012/beast.vcxproj.filters
+++ b/Builds/VisualStudio2012/beast.vcxproj.filters
@@ -809,9 +809,6 @@
beast_core\thread
-
- beast_core\thread
-
beast_core\thread
@@ -1405,9 +1402,6 @@
beast_core\thread
-
- beast_core\thread
-
beast_core\thread
diff --git a/modules/beast_core/beast_core.cpp b/modules/beast_core/beast_core.cpp
index aae18a2485..e837f976d7 100644
--- a/modules/beast_core/beast_core.cpp
+++ b/modules/beast_core/beast_core.cpp
@@ -213,7 +213,6 @@ namespace beast
#include "thread/impl/TrackedMutex.cpp"
#include "thread/beast_DeadlineTimer.cpp"
-#include "thread/beast_OncePerSecond.cpp"
#include "thread/beast_InterruptibleThread.cpp"
#include "thread/beast_Semaphore.cpp"
#include "thread/beast_CallQueue.cpp"
diff --git a/modules/beast_core/beast_core.h b/modules/beast_core/beast_core.h
index 2e4702d078..87d0144bd8 100644
--- a/modules/beast_core/beast_core.h
+++ b/modules/beast_core/beast_core.h
@@ -409,7 +409,6 @@ extern BEAST_API void BEAST_CALLTYPE logAssertion (char const* file, int line) n
#include "functional/beast_Function.h"
#include "thread/beast_DeadlineTimer.h"
-#include "thread/beast_OncePerSecond.h"
#include "memory/beast_AllocatedBy.h"
#include "memory/beast_PagedFreeStore.h"
diff --git a/modules/beast_core/memory/beast_PagedFreeStore.cpp b/modules/beast_core/memory/beast_PagedFreeStore.cpp
index cbdec29b74..fe022ecfc9 100644
--- a/modules/beast_core/memory/beast_PagedFreeStore.cpp
+++ b/modules/beast_core/memory/beast_PagedFreeStore.cpp
@@ -81,7 +81,8 @@ inline PagedFreeStore::Page* PagedFreeStore::toPage (void* const p)
//------------------------------------------------------------------------------
PagedFreeStore::PagedFreeStore (const size_t pageBytes)
- : m_pageBytes (pageBytes)
+ : m_timer (this)
+ , m_pageBytes (pageBytes)
, m_pageBytesAvailable (pageBytes - Memory::sizeAdjustedForAlignment (sizeof (Page)))
, m_newPagesLeft (int ((hardLimitMegaBytes * 1024 * 1024) / m_pageBytes))
#if LOG_GC
@@ -91,12 +92,12 @@ PagedFreeStore::PagedFreeStore (const size_t pageBytes)
m_hot = m_pool1;
m_cold = m_pool2;
- startOncePerSecond ();
+ m_timer.setExpiration (1.0);
}
PagedFreeStore::~PagedFreeStore ()
{
- endOncePerSecond ();
+ m_timer.reset ();
#if LOG_GC
bassert (!m_used.isSignaled ());
@@ -162,7 +163,7 @@ void PagedFreeStore::deallocate (void* const p)
//
// Perform garbage collection.
//
-void PagedFreeStore::doOncePerSecond ()
+void PagedFreeStore::onDeadlineTimer (DeadlineTimer&)
{
// Physically free one page.
// This will reduce the working set over time after a spike.
@@ -195,6 +196,8 @@ void PagedFreeStore::doOncePerSecond ()
<< String (m_newPagesLeft.get ()) << ")";
Logger::outputDebugString (s);
#endif
+
+ m_timer.setExpiration (1.0);
}
void PagedFreeStore::dispose (Pages& pages)
diff --git a/modules/beast_core/memory/beast_PagedFreeStore.h b/modules/beast_core/memory/beast_PagedFreeStore.h
index ebe923fd02..8bfd8045e2 100644
--- a/modules/beast_core/memory/beast_PagedFreeStore.h
+++ b/modules/beast_core/memory/beast_PagedFreeStore.h
@@ -29,7 +29,7 @@
@ingroup beast_concurrent
*/
-class BEAST_API PagedFreeStore : private OncePerSecond
+class BEAST_API PagedFreeStore : private DeadlineTimer::Listener
{
public:
explicit PagedFreeStore (const size_t pageBytes);
@@ -56,7 +56,7 @@ public:
private:
void* newPage ();
- void doOncePerSecond ();
+ void onDeadlineTimer (DeadlineTimer&);
private:
struct Page;
@@ -75,6 +75,7 @@ private:
void dispose (Pool& pool);
private:
+ DeadlineTimer m_timer;
const size_t m_pageBytes;
const size_t m_pageBytesAvailable;
CacheLine::Aligned m_pool1; // pair of pools