On Sat, Nov 2, 2024 at 5:38 AM Sietse van Zanen <sie...@wizdom.nu> wrote:

> I seem to be hitting some very weird corner case causing an assertion
> failure. The offender is ZFS Event Daemon:
>
>
>
> The following code shows the offence:
>
>                                struct udev_device *dev;
>
>                                if ((dev =
> udev_monitor_receive_device(mon)) == NULL) {
>
>                                                zed_log_msg(LOG_WARNING,
> "zed_udev_monitor: receive "
>
>                                                    "device error %d",
> errno);
>
>                                                continue;
>
>                                }
>
>                                …..
>
>                                sectors =
> udev_device_get_property_value(dev,
>
>                                                     "ID_PART_ENTRY_SIZE");
>
>                                if (sectors == NULL)
>
>                                                sectors =
> udev_device_get_sysattr_value(dev, "size");
>
>
>
> Im at a loss here as to what’s causing the assertion failure. Both
> udev_device_get_property_value and udev_device_get_sysattr_value only
> assert a valid udev_device pointer. How can the pointer get lost between
> these two function calls?
>
>
>
> -Sietse
>
>
>
 you need to poll before any valid udev_device is returned to you.

Reply via email to