| Index: runtime/bin/process.h
|
| diff --git a/runtime/bin/process.h b/runtime/bin/process.h
|
| index 02a9ecc845372bf46fa04c0ce5cb2f2c32e5d4a1..adda36a482df209db749dcee60538d91d276377b 100644
|
| --- a/runtime/bin/process.h
|
| +++ b/runtime/bin/process.h
|
| @@ -41,6 +41,41 @@ class ProcessResult {
|
| };
|
|
|
|
|
| +// To be kept in sync with ProcessSignal consts in sdk/lib/io/process.dart
|
| +// Note that this map is as on Linux.
|
| +enum ProcessSignals {
|
| + kSighup = 1,
|
| + kSigint = 2,
|
| + kSigquit = 3,
|
| + kSigill = 4,
|
| + kSigtrap = 5,
|
| + kSigabrt = 6,
|
| + kSigbus = 7,
|
| + kSigfpe = 8,
|
| + kSigkill = 9,
|
| + kSigusr1 = 10,
|
| + kSigsegv = 11,
|
| + kSigusr2 = 12,
|
| + kSigpipe = 13,
|
| + kSigalrm = 14,
|
| + kSigterm = 15,
|
| + kSigchld = 17,
|
| + kSigcont = 18,
|
| + kSigstop = 19,
|
| + kSigtstp = 20,
|
| + kSigttin = 21,
|
| + kSigttou = 22,
|
| + kSigurg = 23,
|
| + kSigxcpu = 24,
|
| + kSigxfsz = 25,
|
| + kSigvtalrm = 26,
|
| + kSigprof = 27,
|
| + kSigwinch = 28,
|
| + kSigpoll = 29,
|
| + kSigsys = 31
|
| +};
|
| +
|
| +
|
| class Process {
|
| public:
|
| // Start a new process providing access to stdin, stdout, stderr and
|
| @@ -84,6 +119,9 @@ class Process {
|
|
|
| static intptr_t CurrentProcessId();
|
|
|
| + static intptr_t SetSignalHandler(intptr_t signal);
|
| + static void ClearSignalHandler(intptr_t signal);
|
| +
|
| static Dart_Handle GetProcessIdNativeField(Dart_Handle process,
|
| intptr_t* pid);
|
| static Dart_Handle SetProcessIdNativeField(Dart_Handle process,
|
| @@ -98,6 +136,46 @@ class Process {
|
| };
|
|
|
|
|
| +class SignalInfo {
|
| + public:
|
| + SignalInfo(int fd, int signal, SignalInfo* prev = NULL)
|
| + : fd_(fd),
|
| + signal_(signal),
|
| + // SignalInfo is expected to be created when in a isolate.
|
| + port_(Dart_GetMainPortId()),
|
| + next_(NULL),
|
| + prev_(prev) {
|
| + if (prev_ != NULL) {
|
| + prev_->next_ = this;
|
| + }
|
| + }
|
| +
|
| + ~SignalInfo();
|
| +
|
| + void Unlink() {
|
| + if (prev_ != NULL) {
|
| + prev_->next_ = next_;
|
| + }
|
| + if (next_ != NULL) {
|
| + next_->prev_ = prev_;
|
| + }
|
| + }
|
| +
|
| + int fd() const { return fd_; }
|
| + int signal() const { return signal_; }
|
| + Dart_Port port() const { return port_; }
|
| + SignalInfo* next() const { return next_; }
|
| +
|
| + private:
|
| + int fd_;
|
| + int signal_;
|
| + // The port_ is used to identify what isolate the signal-info belongs to.
|
| + Dart_Port port_;
|
| + SignalInfo* next_;
|
| + SignalInfo* prev_;
|
| +};
|
| +
|
| +
|
| // Utility class for collecting the output when running a process
|
| // synchronously by using Process::Wait. This class is sub-classed in
|
| // the platform specific files to implement reading into the buffers
|
|
|