1#if defined(i386) || defined(__x86_64__) 2 3#include <libkern/OSAtomic.h> 4#include <stdio.h> 5#include <string.h> 6#include <err.h> 7 8typedef struct { 9 void *next; 10 char *str; 11} QueueNode; 12 13int atomic_fifo_queue_test( void *the_argp ) { 14 OSFifoQueueHead head = OS_ATOMIC_FIFO_QUEUE_INIT; 15 char *str1 = "String 1", *str2 = "String 2"; 16 QueueNode node1 = { 0, str1 }; 17 OSAtomicFifoEnqueue(&head, &node1, 0); 18 QueueNode node2 = { 0, str2 }; 19 OSAtomicFifoEnqueue(&head, &node2, 0); 20 QueueNode *node_ptr = OSAtomicFifoDequeue(&head, 0); 21 if( strcmp(node_ptr->str, str1) != 0 ) { 22 warnx("OSAtomicFifoDequeue returned incorrect string. Expected %s, got %s", str1, node_ptr->str); 23 return 1; 24 } 25 node_ptr = OSAtomicFifoDequeue(&head, 0); 26 if( strcmp(node_ptr->str, str2) != 0 ) { 27 warnx("OSAtomicFifoDequeue returned incorrect string. Expected %s, got %s", str2, node_ptr->str); 28 return 1; 29 } 30 return 0; 31} 32 33#endif 34