diff --git a/master/ioctl.c b/master/ioctl.c index 100db4bb..43a98c1a 100644 --- a/master/ioctl.c +++ b/master/ioctl.c @@ -1899,7 +1899,9 @@ static ATTRIBUTES int ec_ioctl_send( return -EPERM; } + down( & master->io_sem ); ecrt_master_send(master); + up( & master->io_sem ); return 0; } @@ -1919,7 +1921,9 @@ static ATTRIBUTES int ec_ioctl_receive( return -EPERM; } + down( & master->io_sem ); ecrt_master_receive(master); + up( & master->io_sem ); return 0; } @@ -2018,7 +2022,9 @@ static ATTRIBUTES int ec_ioctl_sync_ref( return -EPERM; } + down( & master->io_sem ); ecrt_master_sync_reference_clock(master); + up( & master->io_sem ); return 0; } @@ -2043,7 +2049,9 @@ static ATTRIBUTES int ec_ioctl_sync_ref_to( return -EFAULT; } + down( & master->io_sem ); ecrt_master_sync_reference_clock_to(master, time); + up( & master->io_sem ); return 0; } @@ -2063,7 +2071,9 @@ static ATTRIBUTES int ec_ioctl_sync_slaves( return -EPERM; } + down( & master->io_sem ); ecrt_master_sync_slave_clocks(master); + up( & master->io_sem ); return 0; } @@ -2114,7 +2124,9 @@ static ATTRIBUTES int ec_ioctl_sync_mon_queue( return -EPERM; } + down( & master->io_sem ); ecrt_master_sync_monitor_queue(master); + up( & master->io_sem ); return 0; } @@ -3177,7 +3189,9 @@ static ATTRIBUTES int ec_ioctl_domain_queue( return -ENOENT; } + down( & master->io_sem ); ecrt_domain_queue(domain); + up( & master->io_sem ); return 0; } @@ -3895,7 +3909,9 @@ static ATTRIBUTES int ec_ioctl_voe_exec( return -ENOENT; } + down( & master->io_sem ); data.state = ecrt_voe_handler_execute(voe); + up( & master->io_sem ); if (data.state == EC_REQUEST_SUCCESS && voe->dir == EC_DIR_INPUT) data.size = ecrt_voe_handler_data_size(voe); else