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

Reply via email to