FIX: segfault during neightable timer cleanup
authorHenning Rogge <hrogge@googlemail.com>
Tue, 26 May 2009 15:04:50 +0000 (17:04 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Tue, 26 May 2009 15:04:50 +0000 (17:04 +0200)
src/neighbor_table.c
src/neighbor_table.h
src/process_package.c
src/two_hop_neighbor_table.h

index 84d3f89..df94a23 100644 (file)
@@ -95,10 +95,10 @@ olsr_add_nbr2_list_entry(struct nbr_entry *nbr, struct neighbor_2_entry *nbr2, f
   nbr2_list = olsr_lookup_nbr2_list_entry(nbr, &nbr2->neighbor_2_addr);
   if (nbr2_list) {
 
   nbr2_list = olsr_lookup_nbr2_list_entry(nbr, &nbr2->neighbor_2_addr);
   if (nbr2_list) {
 
-    /* 
+    /*
      * Refresh timer.
      */
      * Refresh timer.
      */
-    olsr_change_timer(nbr2_list->nbr2_list_timer, vtime, OLSR_NBR2_LIST_JITTER, OLSR_TIMER_ONESHOT);
+    olsr_change_timer(nbr2_list->neighbor_2->nbr2_list_timer, vtime, OLSR_NBR2_LIST_JITTER, OLSR_TIMER_ONESHOT);
     return nbr2_list;
   }
 
     return nbr2_list;
   }
 
@@ -114,7 +114,7 @@ olsr_add_nbr2_list_entry(struct nbr_entry *nbr, struct neighbor_2_entry *nbr2, f
   /*
    * Start the timer.
    */
   /*
    * Start the timer.
    */
-  olsr_start_timer(vtime, OLSR_NBR2_LIST_JITTER, OLSR_TIMER_ONESHOT,
+  nbr2->nbr2_list_timer = olsr_start_timer(vtime, OLSR_NBR2_LIST_JITTER, OLSR_TIMER_ONESHOT,
                    &olsr_expire_nbr2_list, nbr2_list, nbr2_list_timer_cookie->ci_id);
 
   /* Add to the nbr2 reference subtree */
                    &olsr_expire_nbr2_list, nbr2_list, nbr2_list_timer_cookie->ci_id);
 
   /* Add to the nbr2 reference subtree */
@@ -146,8 +146,8 @@ olsr_delete_nbr2_list_entry(struct nbr2_list_entry *nbr2_list)
   /*
    * Kill running timers.
    */
   /*
    * Kill running timers.
    */
-  olsr_stop_timer(nbr2_list->nbr2_list_timer);
-  nbr2_list->nbr2_list_timer = NULL;
+  olsr_stop_timer(nbr2_list->neighbor_2->nbr2_list_timer);
+  nbr2_list->neighbor_2->nbr2_list_timer = NULL;
 
   /* Remove from neighbor2 reference subtree */
   avl_delete(&nbr->nbr2_list_tree, &nbr2_list->nbr2_list_node);
 
   /* Remove from neighbor2 reference subtree */
   avl_delete(&nbr->nbr2_list_tree, &nbr2_list->nbr2_list_node);
@@ -301,7 +301,7 @@ olsr_add_nbr_entry(const union olsr_ip_addr *addr)
 /**
  * Lookup a neighbor entry in the neighbortable based on an address.
  * Unalias the passed in address before.
 /**
  * Lookup a neighbor entry in the neighbortable based on an address.
  * Unalias the passed in address before.
- * 
+ *
  * @param addr the IP address of the neighbor to look up
  *
  * @return a pointer to the neighbor struct registered on the given
  * @param addr the IP address of the neighbor to look up
  *
  * @return a pointer to the neighbor struct registered on the given
@@ -395,7 +395,7 @@ olsr_expire_nbr2_list(void *context)
   struct neighbor_2_entry *nbr2;
 
   nbr2_list = (struct nbr2_list_entry *)context;
   struct neighbor_2_entry *nbr2;
 
   nbr2_list = (struct nbr2_list_entry *)context;
-  nbr2_list->nbr2_list_timer = NULL;
+  nbr2_list->neighbor_2->nbr2_list_timer = NULL;
 
   nbr = nbr2_list->nbr2_nbr;
   nbr2 = nbr2_list->neighbor_2;
 
   nbr = nbr2_list->nbr2_nbr;
   nbr2 = nbr2_list->neighbor_2;
index f27ed38..c1345e0 100644 (file)
@@ -56,7 +56,6 @@ struct nbr2_list_entry {
   struct avl_node nbr2_list_node;
   struct nbr_entry *nbr2_nbr;          /* backpointer to owning nbr entry */
   struct neighbor_2_entry *neighbor_2;
   struct avl_node nbr2_list_node;
   struct nbr_entry *nbr2_nbr;          /* backpointer to owning nbr entry */
   struct neighbor_2_entry *neighbor_2;
-  struct timer_entry *nbr2_list_timer;
 };
 
 AVLNODE2STRUCT(nbr2_list_node_to_nbr2_list, struct nbr2_list_entry, nbr2_list_node);
 };
 
 AVLNODE2STRUCT(nbr2_list_node_to_nbr2_list, struct nbr2_list_entry, nbr2_list_node);
index 67868b3..a5d3cf3 100644 (file)
@@ -99,7 +99,7 @@ process_message_neighbors(struct nbr_entry *neighbor, const struct lq_hello_mess
         struct neighbor_list_entry *walker;
 
         /* Updating the holding time for this neighbor */
         struct neighbor_list_entry *walker;
 
         /* Updating the holding time for this neighbor */
-        olsr_set_timer(&two_hop_neighbor_yet->nbr2_list_timer,
+        olsr_set_timer(&two_hop_neighbor_yet->neighbor_2->nbr2_list_timer,
                        message->comm.vtime, OLSR_NBR2_LIST_JITTER,
                        OLSR_TIMER_ONESHOT, &olsr_expire_nbr2_list, two_hop_neighbor_yet, nbr2_list_timer_cookie->ci_id);
 
                        message->comm.vtime, OLSR_NBR2_LIST_JITTER,
                        OLSR_TIMER_ONESHOT, &olsr_expire_nbr2_list, two_hop_neighbor_yet, nbr2_list_timer_cookie->ci_id);
 
index 992c4a5..b040b8a 100644 (file)
@@ -65,6 +65,7 @@ struct neighbor_2_entry {
   uint8_t mpr_covered_count;           /*used in mpr calculation */
   uint8_t processed;                   /*used in mpr calculation */
   int16_t neighbor_2_pointer;          /* Neighbor count */
   uint8_t mpr_covered_count;           /*used in mpr calculation */
   uint8_t processed;                   /*used in mpr calculation */
   int16_t neighbor_2_pointer;          /* Neighbor count */
+  struct timer_entry *nbr2_list_timer;
   struct neighbor_list_entry neighbor_2_nblist;
   struct neighbor_2_entry *prev;
   struct neighbor_2_entry *next;
   struct neighbor_list_entry neighbor_2_nblist;
   struct neighbor_2_entry *prev;
   struct neighbor_2_entry *next;
@@ -89,7 +90,7 @@ struct neighbor_2_entry {
 
 extern struct neighbor_2_entry two_hop_neighbortable[HASHSIZE];
 
 
 extern struct neighbor_2_entry two_hop_neighbortable[HASHSIZE];
 
-void olsr_init_two_hop_table(void); 
+void olsr_init_two_hop_table(void);
 void olsr_delete_neighbor_pointer(struct neighbor_2_entry *, struct nbr_entry *);
 void olsr_delete_two_hop_neighbor_table(struct neighbor_2_entry *);
 void olsr_insert_two_hop_neighbor_table(struct neighbor_2_entry *);
 void olsr_delete_neighbor_pointer(struct neighbor_2_entry *, struct nbr_entry *);
 void olsr_delete_two_hop_neighbor_table(struct neighbor_2_entry *);
 void olsr_insert_two_hop_neighbor_table(struct neighbor_2_entry *);