New release: v2.2.6, v2.1.8 and v2.0.9

1 minute read

v2.2.6, v2.1.8 and v2.0.9 have just been released. These are minor releases containing only bugfixes and minor improvements.

Bug fixes

The following bugs have been fixed in all three versions:

  • co_val_cmp() now correctly compares TIME_OF_DAY and TIME_DIFF values: the days member is compared before the ms member.
  • A potential race condition was fixed in asynchronous I/O functions, which made it possible in a multi-threaded environment for an asynchronous operation to complete and release its promise before the invoking function acquired the corresponding future.
  • The Transmit-PDO event timer no longer stops in case of an error.
  • co_sdev_load() no longer causes compilation failures when LELY_NO_CO_OBJ_NAME is defined.

The following additional issues have been addressed in v2.2.6:

  • Drivers inheriting from canopen::LoopDriver can now use the Join() method in their destructor to ensure the thread running the dedicated event loop finishes its execution before continuing. This is necessary to guarantee that all tasks involving registered logical drivers have finished before those drivers are destroyed. The Join() method is public, so it can also be used to synchronize the destruction of logical drivers that are not owned by the driver inheriting from LoopDriver.
  • The USleep() method in canopen::LoopDriver now uses an actual timer instead of relying on the run_for() method of ev::Loop. This makes the implementation consistent with canopen::FiberDriver and removes the 1 ms resolution of the timeout.
  • The AsyncWait() operation used by the USleep() method in canopen::LoopDriver and canopen::FiberDriver is now canceled if the event loop is interrupted.
  • dcfgen now copies the producer heartbeat time from object 1017h in the slave EDS/DCF if the heartbeat_producer attribute is not explicitly specified.
  • dcfgen no longer omits the SDO request to set the number of mapped objects to 0 before changing the PDO mapping.
  • The on_can_state() method in io::CanNet now receives the new_state and old_state arguments in the correct order.


You can download the source from GitLab or the Ubuntu packages from our PPA.