I have included a patch that fixes an issue I was having. I know it will
slow the timer stuff down a little, but I think it is needed.
I was having and issue where a timer was getting deleted, as it was still
sitting in the insert queue.
So after the timer was deleted, it got inserted into the wheel timer.
Once it has expired, it would crash.
Peter
Index: wheeltimer.h
===================================================================
--- wheeltimer.h (revision 1223)
+++ wheeltimer.h (working copy)
@@ -89,13 +89,14 @@
//the timer wheel
base_timer wheels[WHEELS][ELMTS_PER_WHEEL];
+ // utimer add/remove lock
+ AmMutex utimer_m;
+
//list with timer insertions requests
std::queue<timer*> utimer_add;
- AmMutex utimer_add_m;
//list with timer deletions requests
std::queue<timer*> utimer_rem;
- AmMutex utimer_rem_m;
//list with expired timers
base_timer utimer_expired;
Index: wheeltimer.cpp
===================================================================
--- wheeltimer.cpp (revision 1223)
+++ wheeltimer.cpp (working copy)
@@ -64,17 +64,17 @@
void wheeltimer::insert_timer(timer* t)
{
//add new timer to user request list
- utimer_add_m.lock();
+ utimer_m.lock();
utimer_add.push(t);
- utimer_add_m.unlock();
+ utimer__m.unlock();
}
void wheeltimer::remove_timer(timer* t)
{
//add new timer to user request list
- utimer_rem_m.lock();
+ utimer_m.lock();
utimer_rem.push(t);
- utimer_rem_m.unlock();
+ utimer_m.unlock();
}
void wheeltimer::run()
@@ -155,20 +155,18 @@
update_wheel(i);
// Check for timer insertion requests
- utimer_add_m.lock();
+ utimer_m.lock();
while(!utimer_add.empty()) {
place_timer(utimer_add.front());
utimer_add.pop();
}
- utimer_add_m.unlock();
// Check for timer deletion requests
- utimer_rem_m.lock();
while(!utimer_rem.empty()) {
delete_timer(utimer_rem.front());
utimer_rem.pop();
}
- utimer_rem_m.unlock();
+ utimer_m.unlock();
//check for expired timer to process
process_current_timers();_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev