diff -r 4d8c9a441ef6 -r b544025bd696 master/datagram.c --- a/master/datagram.c Thu May 12 16:38:48 2011 +0200 +++ b/master/datagram.c Thu May 12 16:45:02 2011 +0200 @@ -87,13 +87,17 @@ */ void ec_datagram_init(ec_datagram_t *datagram /**< EtherCAT datagram. */) { + INIT_LIST_HEAD(&datagram->list); // mark as unqueued INIT_LIST_HEAD(&datagram->queue); // mark as unqueued + INIT_LIST_HEAD(&datagram->fsm_queue); // mark as unqueued + INIT_LIST_HEAD(&datagram->sent); // mark as unqueued datagram->type = EC_DATAGRAM_NONE; memset(datagram->address, 0x00, EC_ADDR_LEN); datagram->data = NULL; datagram->data_origin = EC_ORIG_INTERNAL; datagram->mem_size = 0; datagram->data_size = 0; + datagram->domain = NULL; datagram->index = 0x00; datagram->working_counter = 0x0000; datagram->state = EC_DATAGRAM_INIT; @@ -130,6 +134,9 @@ */ void ec_datagram_unqueue(ec_datagram_t *datagram /**< EtherCAT datagram. */) { + if (!list_empty(&datagram->fsm_queue)) { + list_del_init(&datagram->fsm_queue); + } if (!list_empty(&datagram->queue)) { list_del_init(&datagram->queue); }