--- a/master/datagram.c Fri May 13 15:33:16 2011 +0200
+++ b/master/datagram.c Fri May 13 15:34:20 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);
}