udev: Ensure udev_event_spawn reads stdout
When running the program with udev_event_spawn it is possible to miss output in stdout when the program exits causing the result to be empty which can cause rules using the result to not function correctly. This is due to the on_spawn_sigchld callback being processed while IO is still pending and causing the event loop to exit. To correct this the sigchld event source is made a lower priority than the other event sources to ensure it is processed after IO. This requires changing the IO event source to oneshot and re-enabling it when valid data is read but not for EOF, this prevents the empty pipes constantly generating IO events.
Loading
Please register or sign in to comment