This release changes the resource management strategy. Tracking lifetimes of dependent resources makes for a less-ergonomic API. That has been replaced with reference-counting. There are no known backwards-compatibility issues with this change, so existing code should not have to be updated for compatibility with reference-counting.
There are, however, some breaking changes to the API that are unrelated to the changes in resource management:
-
Context::device_from_syspath()has been moved toDevice::from_syspath(). Upgrading involves a search-and-replace. Anywhere you have the following code:context.device_from_syspath(path);
should be replaced with:
Device::from_syspath(&context, path);
-
Several methods on
Devicechanged their return type to account for the possibility of the C library returningNULLpointers:Device::syspath()returnsOption<&Path>instead of&Path.Device::devpath()returnsOption<&OsStr>instead of&OsStr.Device::subsystem()returnsOption<&OsStr>instead of&OsStr.Device::sysname()returnsOption<&OsStr>instead of&OsStr.
Client code will have to decide how to handle a
Nonereturn value.
Added
- Implemented
CloneforContext.
Fixed
- Fixed several issues related to lifetimes.
- Handled possible
NULLreturn fromudev_device_get_syspath(),udev_device_get_devpath(),udev_device_get_subsystem(), andudev_device_get_sysname(). - Reduced memory footprint of several types to a single pointer.
- Reduced unnecessary memory allocations when iterating devices and setting up a monitor.
Changed
- Replaced explicit lifetimes with reference counting.
- Moved
Context::device_from_syspath()toDevice::from_syspath(). - Changed return type of
Device::syspath(),Device::devpath(),Device::subsystem(), and
Device::sysname()toOption<...>.