48 Scavenger(
int sec = 2,
int defaultObjectListSize = 200);
61 void scavenge(
bool clearNow =
false);
106 template <
typename T>
109 if (m_scavenged < m_claimed) {
110 for (
size_t i = 0; i < m_objects.size(); ++i) {
112 if (pair.first != 0) {
124 template <
typename T>
131 (void)gettimeofday(&tv, 0);
134 for (
size_t i = 0; i < m_objects.size(); ++i) {
136 if (pair.first == 0) {
144 std::cerr <<
"WARNING: Scavenger::claim(" << t <<
"): run out of slots, " 145 <<
"using non-RT-safe method" << std::endl;
149 template <
typename T>
155 if (m_scavenged >= m_claimed)
return;
158 (void)gettimeofday(&tv, 0);
161 for (
size_t i = 0; i < m_objects.size(); ++i) {
164 (pair.first != 0 && pair.second + m_sec < sec)) {
172 if (sec > m_lastExcess + m_sec) {
177 template <
typename T>
181 m_excessMutex.lock();
182 m_excess.push_back(t);
184 (void)gettimeofday(&tv, 0);
185 m_lastExcess = tv.tv_sec;
186 m_excessMutex.unlock();
189 template <
typename T>
193 m_excessMutex.lock();
194 for (
typename ObjectList::iterator i = m_excess.begin();
195 i != m_excess.end(); ++i) {
200 m_excessMutex.unlock();
Scavenger(int sec=2, int defaultObjectListSize=200)
std::list< T * > ObjectList
ScavengerArrayWrapper(T *array)
A very simple class that facilitates running things like plugins without locking, by collecting unwan...
void scavenge(bool clearNow=false)
Call from a non-RT thread.
std::pair< T *, int > ObjectTimePair
A wrapper to permit arrays to be scavenged.
std::vector< ObjectTimePair > ObjectTimeList
void claim(T *t)
Call from an RT thread etc., to pass ownership of t to us.