Makefile-> change name of netapi lib
[keystone-rtos/netapi.git] / ti / runtime / netapi / src / timlist.c
index dcea6e9364737d0f7afdba458b15989ba6c06347..9b086de91b77813f176486a6eb5b3991122f99b1 100644 (file)
  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
  ***************************************/
-#include "netapi_timer.h"
+//#define TEST_DRIVER
+#ifdef TEST_DRIVER
+typedef void * NETAPI_T;
+typedef void * NETAPI_TIMER_CB_T;
+#else
+#include "../netapi_timer.h"
+#endif
 #include "timer_loc.h"
-#include "netapi_err.h"
+#include "../netapi_err.h"
 
 #ifndef NULL
 #define NULL 0
@@ -181,13 +187,14 @@ for(i=0;p;)
        }
        else //skip over cancelled timer..
        {
-         //skip & free
+         //skip & free. make sure we adjust head or tail if necessary
          if (p_last){
              p_last->next=p->next; 
          }
          else {
-            tl->head = p->next;
+            tl->head = p->next; /* we are freeing old head..*/
          }
+         if (tl->tail ==p)  tl->tail=p_last; /* we are freeing old tail */
          temp_p_next=p->next;
          tim_return_single_free(ftl,p);
          p=temp_p_next; 
@@ -206,6 +213,7 @@ for(i=0;p;)
          else {
             tl->head = p->next;
          }
+         if (tl->tail ==p)  tl->tail=p_last; /* we are freeing old tail */
          temp_p_next=p->next;
          tim_return_single_free(ftl,p);
          p=temp_p_next;      
@@ -305,7 +313,6 @@ tl->tail=p;
 return p;
 }
 
-//#define TEST_DRIVER
 #ifdef TEST_DRIVER
 TIM_LIST_T the_base={NULL,NULL};
 TIM_LIST_T cell_base={NULL,NULL};
@@ -340,7 +347,23 @@ tim_return_fired_list(&cell_base, &res, &the_base, (unsigned long long) i,  &n);
  printf("at %d got %d\n", i, n);
  if (n) tim_return_free(&the_base,&res,n);
  }
+
+//special cases..
+
+ timers[0]=tim_set(&cell_base, &the_base, 106LL, (void *)10, &err);
+ tim_cancel(timers[0],&err);
+ tim_return_fired_list(&cell_base, &res, &the_base, (unsigned long long) 106,  &n);
  
+ timers[0]=tim_set(&cell_base, &the_base, 106LL, (void *)10, &err);
+ timers[1]=tim_set(&cell_base, &the_base, 106LL, (void *)10, &err);
+ tim_cancel(timers[0],&err);
+ tim_return_fired_list(&cell_base, &res, &the_base, (unsigned long long) 106,  &n);
+
+ timers[0]=tim_set(&cell_base, &the_base, 106LL, (void *)10, &err);
+ timers[1]=tim_set(&cell_base, &the_base, 106LL, (void *)10, &err);
+ tim_cancel(timers[0],&err);
+ tim_cancel(timers[1],&err);
+ tim_return_fired_list(&cell_base, &res, &the_base, (unsigned long long) 106,  &n);
  
 }
 #endif