From: Harlan Stenn Date: Thu, 14 Jun 2007 22:42:17 +0000 (-0400) Subject: [Bug 853] get_node() must return a pointer to maximally-aligned memory X-Git-Tag: NTP_4_2_5P50~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=182a0277624063b49148e6573764d899b9a5b483;p=thirdparty%2Fntp.git [Bug 853] get_node() must return a pointer to maximally-aligned memory bk: 4671c449py4c3Ox-cmpFo7ZsA9WoYg --- diff --git a/ChangeLog b/ChangeLog index d7d5b2730..00e5c120d 100644 --- 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. diff --git a/include/ntp_data_structures.h b/include/ntp_data_structures.h index 4c3261fa9..d72f6b586 100644 --- a/include/ntp_data_structures.h +++ b/include/ntp_data_structures.h @@ -19,8 +19,12 @@ */ 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 *); diff --git a/ntpd/ntp_data_structures.c b/ntpd/ntp_data_structures.c index 0ead2dd4b..e1a4b7aca 100644 --- a/ntpd/ntp_data_structures.c +++ b/ntpd/ntp_data_structures.c @@ -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); }