diff -r c9e2c3be294e -r 4e8d56d6f12a master/datagram.c --- a/master/datagram.c Wed Oct 28 14:59:34 2009 +0100 +++ b/master/datagram.c Thu Oct 29 17:28:49 2009 +0100 @@ -116,6 +116,8 @@ */ void ec_datagram_clear(ec_datagram_t *datagram /**< EtherCAT datagram. */) { + ec_datagram_unqueue(datagram); + if (datagram->data_origin == EC_ORIG_INTERNAL && datagram->data) { kfree(datagram->data); datagram->data = NULL; @@ -124,6 +126,17 @@ /*****************************************************************************/ +/** Unqueue datagram. + */ +void ec_datagram_unqueue(ec_datagram_t *datagram /**< EtherCAT datagram. */) +{ + if (!list_empty(&datagram->queue)) { + list_del_init(&datagram->queue); + } +} + +/*****************************************************************************/ + /** Allocates internal payload memory. * * If the allocated memory is already larger than requested, nothing ist done.