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

implement signal handling #11203

Closed
alexcrichton opened this issue Dec 30, 2013 · 8 comments
Closed

implement signal handling #11203

alexcrichton opened this issue Dec 30, 2013 · 8 comments
Labels
C-enhancement Category: An issue proposing an enhancement or a PR with one. P-medium Medium priority

Comments

@alexcrichton
Copy link
Member

This involves filling out libnative/io/mod.rs, but this is also a very tricky issue. Right now the API is wrapped around what libuv provided for us, but that may not be the best API to have.

Dealing with signals is always an incredibly tricky topic, and here's the ideas for what should possibly happen:

  • on linux (maybe android?) signalfd should be used for everything
  • on windows, basically just do whatever libuv does and pray that everything works
  • on everything else, we're going to have to resort to sigaction. I believe that the best way to deal with this is libuv's trick of a self-looping pipe (the signal handler writes the signal onto a pipe which is read in the "event loop"). This will certainly involve some trickiness.

It has also been brought up that there are primitives like sigwait on unixes which can be used to just block a thread when waiting for "some group of signals", but the API which we have created for signals cannot wrap this functionality. We could add a similar function for libgreen/libnative, but I personally don't think it's worth it. It is worth some discussion, however.

@alexcrichton
Copy link
Member Author

Nominating.

@pnkfelix
Copy link
Member

pnkfelix commented Feb 6, 2014

Assigning P-high, not 1.0.

@aturon
Copy link
Member

aturon commented Jun 3, 2014

cc me. I'm interested in working on this one.

@thestinger thestinger changed the title Signal handling needs a 1:1 implementation implement signal handling Oct 2, 2014
@l0kod
Copy link
Contributor

l0kod commented Nov 11, 2014

It would be great to be able to handle signals per task. This way we could send interrupt events to running tasks (e.g. to exit a blocking syscall).

Maybe a channel-like interface could allow to extend the OS-specific signal types with custom types/objects.

@l0kod
Copy link
Contributor

l0kod commented Nov 29, 2014

Maybe a channel-like interface could allow to extend the OS-specific signal types with custom types/objects.

This could be an interesting abstraction of sigqueue.

@l0kod
Copy link
Contributor

l0kod commented Nov 29, 2014

About signal receiving, a nice signalfd implementation could return a Signal struct wrapping an IoHandle<Fd> (cf. #19169) which could create a Receiver (with event()) usable with select!.

Signal could then expose SigInfo structs through an Iterator interface.

@l0kod
Copy link
Contributor

l0kod commented Mar 21, 2015

cc Safe async/reentrant closure

@steveklabnik
Copy link
Member

Pretty sure this would go through the RFC process these days, as it's pretty huge, so moving over there rust-lang/rfcs#1368

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-enhancement Category: An issue proposing an enhancement or a PR with one. P-medium Medium priority
Projects
None yet
Development

No branches or pull requests

5 participants