fixed race condition when comparing datagram state

EC_DATAGRAM_QUEUED must be compared before EC_DATAGRAM_SENT because it might change in between
This commit is contained in:
Martin Troxler 2011-03-14 16:08:25 +01:00
parent 144ac534f6
commit f405ebef0a
5 changed files with 9 additions and 9 deletions

View File

@ -324,7 +324,7 @@ void ec_eoe_run(ec_eoe_t *eoe /**< EoE handler */)
// if the datagram was not sent, or is not yet received, skip this cycle
if (eoe->queue_datagram ||
eoe->datagram.state == EC_DATAGRAM_SENT || eoe->datagram.state == EC_DATAGRAM_QUEUED)
eoe->datagram.state == EC_DATAGRAM_QUEUED || eoe->datagram.state == EC_DATAGRAM_SENT)
return;
// call state function

View File

@ -133,8 +133,8 @@ int ec_fsm_master_exec(
ec_fsm_master_t *fsm /**< Master state machine. */
)
{
if (fsm->datagram->state == EC_DATAGRAM_SENT
|| fsm->datagram->state == EC_DATAGRAM_QUEUED) {
if (fsm->datagram->state == EC_DATAGRAM_QUEUED
|| fsm->datagram->state == EC_DATAGRAM_SENT) {
// datagram was not sent or received yet.
return 0;
}

View File

@ -101,8 +101,8 @@ int ec_fsm_slave_exec(
ec_fsm_slave_t *fsm /**< Slave state machine. */
)
{
if (fsm->datagram->state == EC_DATAGRAM_SENT
|| fsm->datagram->state == EC_DATAGRAM_QUEUED) {
if (fsm->datagram->state == EC_DATAGRAM_QUEUED
|| fsm->datagram->state == EC_DATAGRAM_SENT) {
// datagram was not sent or received yet.
return 0;
}

View File

@ -177,8 +177,8 @@ int ec_fsm_slave_config_exec(
ec_fsm_slave_config_t *fsm /**< slave state machine */
)
{
if (fsm->datagram->state == EC_DATAGRAM_SENT
|| fsm->datagram->state == EC_DATAGRAM_QUEUED) {
if (fsm->datagram->state == EC_DATAGRAM_QUEUED
|| fsm->datagram->state == EC_DATAGRAM_SENT) {
// datagram was not sent or received yet.
return ec_fsm_slave_config_running(fsm);
}

View File

@ -137,8 +137,8 @@ int ec_fsm_slave_scan_running(const ec_fsm_slave_scan_t *fsm /**< slave state ma
int ec_fsm_slave_scan_exec(ec_fsm_slave_scan_t *fsm /**< slave state machine */)
{
if (fsm->datagram->state == EC_DATAGRAM_SENT
|| fsm->datagram->state == EC_DATAGRAM_QUEUED) {
if (fsm->datagram->state == EC_DATAGRAM_QUEUED
|| fsm->datagram->state == EC_DATAGRAM_SENT) {
// datagram was not sent or received yet.
return ec_fsm_slave_scan_running(fsm);
}