]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 853] get_node() must return a pointer to maximally-aligned memory
authorHarlan Stenn <stenn@ntp.org>
Thu, 14 Jun 2007 22:42:17 +0000 (18:42 -0400)
committerHarlan Stenn <stenn@ntp.org>
Thu, 14 Jun 2007 22:42:17 +0000 (18:42 -0400)
bk: 4671c449py4c3Ox-cmpFo7ZsA9WoYg

ChangeLog
include/ntp_data_structures.h
ntpd/ntp_data_structures.c

index d7d5b27302c894fb15ea1cf2e3e7c30c68d46208..00e5c120db450d8246f39c755c2e6a0098439a55 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,4 @@
+* [Bug 853] get_node() must return a pointer to maximally-aligned memory.
 * Leap file fixes from Dave Mills.
 * [Bug 858] Recent leapfile changes broke without OPENSSL.
 * Use a char for DIR_SEP, not a string.
index 4c3261fa92f1fd597619b06146296fec743508ac..d72f6b586925cbeb75938e067947aeccdd3068d9 100644 (file)
  */
 
 typedef struct node {
-    struct node *next;
+       union {
+               struct node *next;
+               double d;
+       } nodeu;
 } node;
+#define node_next nodeu.next
     
 typedef struct Queue {
     int (*get_order)(void *, void *);
index 0ead2dd4bf642a3035d8c27081ffc05a53cc9adc..e1a4b7aca7fbdf4c84e9c20b0c311be65950cafa 100644 (file)
@@ -42,7 +42,7 @@ void destroy_queue(queue *my_queue)
     /* Empty out the queue elements if they are not already empty */
     while (my_queue->front != NULL) {
         temp = my_queue->front;
-        my_queue->front = my_queue->front->next;
+        my_queue->front = my_queue->front->node_next;
         free(temp);
     }
 
@@ -61,7 +61,7 @@ void *get_node(size_t size)
     node *new_node;
     new_node = (node *) malloc(sizeof(node) + size);
     if (new_node != NULL) {
-        new_node->next = NULL; 
+        new_node->node_next = NULL; 
         return new_node + 1;
     }
     else
@@ -94,16 +94,16 @@ queue *enqueue(queue *my_queue, void *my_node)
 
     while (j != NULL && ((*my_queue->get_order)(new_node + 1, j + 1) > 0)) {
         i = j;
-        j = j->next;
+        j = j->node_next;
     }
     
     if (i == NULL) {       /* Insert at beginning of the queue */
-        new_node->next = my_queue->front;
+        new_node->node_next = my_queue->front;
         my_queue->front = new_node;
     }
     else {                /* Insert Elsewhere, including the end */
-        new_node->next = i->next;
-        i->next = new_node;
+        new_node->node_next = i->node_next;
+        i->node_next = new_node;
     }
 
     ++my_queue->no_of_elements;    
@@ -119,7 +119,7 @@ void *dequeue(queue *my_queue)
 {
     node *my_node = my_queue->front;
     if (my_node != NULL) {
-        my_queue->front = my_node->next;
+        my_queue->front = my_node->node_next;
         --my_queue->no_of_elements;    
         return (void *)(my_node + 1);
     }