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:
parent
144ac534f6
commit
f405ebef0a
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue