Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eliminate flux_child_watcher_create() from the public API #6512

Closed
garlick opened this issue Dec 16, 2024 · 0 comments
Closed

eliminate flux_child_watcher_create() from the public API #6512

garlick opened this issue Dec 16, 2024 · 0 comments

Comments

@garlick
Copy link
Member

garlick commented Dec 16, 2024

Problem: flux_child_watcher_create() is only used by internally by libsubprocess, and cannot be provided by libuv (#6492)

These are not super useful on their own, given that the Flux API provides the subprocess interface. Perhaps we could remove them from the public API for now, and then a port to libuv could provide an alternative implementation within libsubprocess.

See also: https://metacpan.org/dist/EV/view/libev/ev.pod#ev_child-watch-out-for-process-status-changes

garlick added a commit to garlick/flux-core that referenced this issue Jan 7, 2025
Problem: the FLUX_REACTOR_SIGCHLD flag outsources SIGCHLD handling
to the libev default loop and implements non-portable child watchers
using libev's ev_child.  This is a road block to swapping out the
internal reactor with libuv.

Handle the FLUX_REACTOR_SIGCHLD flag by registering an internal flux
signal watcher for SIGCHLD, in much the same way that libev does it
internally for the default loop.  The SIGCHLD handler reaps all process
children, even those without child watchers.

The following internal reactor interfaces are added so that a portable
child watcher can be implemented:

reactor_get_flags()
  Allow the flags passed to flux_reactor_create() to be accessed.
reactor_sigchld_register()
  Register a callback for consuming (pid, status) tuples from waitpid(),
  which is called from the internal SIGCHLD signal watcher.
reactor_sigchld_unregister()
  Unregister said callback.

Drop the non-portable child watcher implementation from the public API.
Replace them in libsubprocess with private child watchers, implemented
portably with flux watchers and the above private reactor interfaces.

Update unit tests.

Fixes flux-framework#6512
garlick added a commit to garlick/flux-core that referenced this issue Jan 8, 2025
Problem: child watchers have no users, are likely not required in the
public API, and inhibit changing the internal reactor to libuv.

Drop them.

Fixes flux-framework#6512
garlick added a commit to garlick/flux-core that referenced this issue Jan 9, 2025
Problem: child watchers have no users, are likely not required in the
public API, and inhibit changing the internal reactor to libuv.

Drop them.

Fixes flux-framework#6512
@mergify mergify bot closed this as completed in b803986 Jan 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant