diff -r 83e9160319ec -r 53b5128e1313 master/master.c --- a/master/master.c Mon Aug 01 17:02:45 2011 +0200 +++ b/master/master.c Mon Aug 01 17:54:56 2011 +0200 @@ -846,23 +846,6 @@ { ec_datagram_t *queued_datagram; - switch (datagram->state) { - case EC_DATAGRAM_QUEUED: - datagram->skip_count++; - EC_MASTER_DBG(master, 1, "Skipping already queued datagram %p.\n", - datagram); - break; - - case EC_DATAGRAM_SENT: - datagram->skip_count++; - EC_MASTER_DBG(master, 1, "Skipping already sent datagram %p.\n", - datagram); - break; - - default: - break; - } - /* It is possible, that a datagram in the queue is re-initialized with the * ec_datagram_() methods and then shall be queued with this method. * In that case, the state is already reset to EC_DATAGRAM_INIT. Check if @@ -872,14 +855,17 @@ list_for_each_entry(queued_datagram, &master->datagram_queue, queue) { if (queued_datagram == datagram) { datagram->skip_count++; - EC_MASTER_DBG(master, 1, "Skipping re-initialized datagram %p.\n", - datagram); - datagram->state = EC_DATAGRAM_QUEUED; - return; + if (master->debug_level) { + EC_MASTER_DBG(master, 1, "Skipping datagram %p (", datagram); + ec_datagram_output_info(datagram); + printk(")\n"); + } + goto queued; } } list_add_tail(&datagram->queue, &master->datagram_queue); +queued: datagram->state = EC_DATAGRAM_QUEUED; } @@ -933,7 +919,7 @@ datagram->index = master->datagram_index++; EC_MASTER_DBG(master, 2, "Adding datagram %p i=0x%02X size=%zu\n", - datagram, datagram->index,datagram_size); + datagram, datagram->index, datagram_size); // set "datagram following" flag in previous frame if (follows_word) {