Version 1.4.0-dev.6.7
svn merge -c 36153 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 36203 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@36210 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/bin/process.h b/runtime/bin/process.h
index adda36a..154347d 100644
--- a/runtime/bin/process.h
+++ b/runtime/bin/process.h
@@ -138,15 +138,15 @@
class SignalInfo {
public:
- SignalInfo(int fd, int signal, SignalInfo* prev = NULL)
+ SignalInfo(int fd, int signal, SignalInfo* next = 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;
+ next_(next),
+ prev_(NULL) {
+ if (next_ != NULL) {
+ next_->prev_ = this;
}
}
diff --git a/runtime/bin/process_android.cc b/runtime/bin/process_android.cc
index c13aa98..a2e6aa2 100644
--- a/runtime/bin/process_android.cc
+++ b/runtime/bin/process_android.cc
@@ -710,11 +710,7 @@
return -1;
}
}
- if (signal_handlers == NULL) {
- signal_handlers = new SignalInfo(fds[1], signal);
- } else {
- new SignalInfo(fds[1], signal, signal_handlers);
- }
+ signal_handlers = new SignalInfo(fds[1], signal, signal_handlers);
return fds[0];
}
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index ef0927a..75e5126 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -703,11 +703,7 @@
return -1;
}
}
- if (signal_handlers == NULL) {
- signal_handlers = new SignalInfo(fds[1], signal);
- } else {
- new SignalInfo(fds[1], signal, signal_handlers);
- }
+ signal_handlers = new SignalInfo(fds[1], signal, signal_handlers);
return fds[0];
}
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc
index e84b115..5c2dcb2 100644
--- a/runtime/bin/process_macos.cc
+++ b/runtime/bin/process_macos.cc
@@ -756,11 +756,7 @@
return -1;
}
}
- if (signal_handlers == NULL) {
- signal_handlers = new SignalInfo(fds[1], signal);
- } else {
- new SignalInfo(fds[1], signal, signal_handlers);
- }
+ signal_handlers = new SignalInfo(fds[1], signal, signal_handlers);
return fds[0];
}
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 3875b4f..56d38be 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -920,10 +920,8 @@
SetLastError(error_code);
return -1;
}
- signal_handlers = new SignalInfo(write_fd, signal);
- } else {
- new SignalInfo(write_fd, signal, signal_handlers);
}
+ signal_handlers = new SignalInfo(write_fd, signal, signal_handlers);
return reinterpret_cast<intptr_t>(new FileHandle(fds[kReadHandle]));
}
diff --git a/tests/standalone/io/signal_test_script.dart b/tests/standalone/io/signal_test_script.dart
index 02b2c25..07f4c03 100644
--- a/tests/standalone/io/signal_test_script.dart
+++ b/tests/standalone/io/signal_test_script.dart
@@ -6,22 +6,24 @@
import "dart:async";
void main(args) {
- var signal;
// This process should die if it never receives a signal.
var timeout = new Timer(new Duration(seconds: 25), () => exit(1));
- switch (args[0]) {
- case 'SIGHUP': signal = ProcessSignal.SIGHUP; break;
- case 'SIGINT': signal = ProcessSignal.SIGINT; break;
- case 'SIGTERM': signal = ProcessSignal.SIGTERM; break;
- case 'SIGUSR1': signal = ProcessSignal.SIGUSR1; break;
- case 'SIGUSR2': signal = ProcessSignal.SIGUSR2; break;
- case 'SIGWINCH': signal = ProcessSignal.SIGWINCH; break;
+ for (var arg in args) {
+ var signal;
+ switch (arg) {
+ case 'SIGHUP': signal = ProcessSignal.SIGHUP; break;
+ case 'SIGINT': signal = ProcessSignal.SIGINT; break;
+ case 'SIGTERM': signal = ProcessSignal.SIGTERM; break;
+ case 'SIGUSR1': signal = ProcessSignal.SIGUSR1; break;
+ case 'SIGUSR2': signal = ProcessSignal.SIGUSR2; break;
+ case 'SIGWINCH': signal = ProcessSignal.SIGWINCH; break;
+ }
+ signal.watch().first.then((s) {
+ if (signal != s) exit(1);
+ if (signal.toString() != arg) exit(1);
+ print(signal);
+ exit(0);
+ });
}
- signal.watch().first.then((s) {
- if (signal != s) exit(1);
- if (signal.toString() != args[0]) exit(1);
- print('got signal');
- timeout.cancel();
- });
print("ready");
}
diff --git a/tests/standalone/io/signals_test.dart b/tests/standalone/io/signals_test.dart
index d73b01a..a811208 100644
--- a/tests/standalone/io/signals_test.dart
+++ b/tests/standalone/io/signals_test.dart
@@ -60,7 +60,7 @@
process.kill(signal);
}
}, onDone: () {
- Expect.equals('ready\ngot signal\n', output);
+ Expect.equals('ready\n$signal\n', output);
});
process.exitCode.then((exitCode) {
Expect.equals(0, exitCode);
@@ -69,6 +69,34 @@
});
}
+void testMultipleSignals(List<ProcessSignal> signals) {
+ for (var signal in signals) {
+ asyncStart();
+ Process.start(Platform.executable,
+ [Platform.script.resolve('signal_test_script.dart').toFilePath()]
+ ..addAll(signals.map((s) => s.toString())))
+ .then((process) {
+ process.stdin.close();
+ process.stderr.drain();
+
+ var output = "";
+ process.stdout.transform(UTF8.decoder)
+ .listen((str) {
+ output += str;
+ if (output == 'ready\n') {
+ process.kill(signal);
+ }
+ }, onDone: () {
+ Expect.equals('ready\n$signal\n', output);
+ });
+ process.exitCode.then((exitCode) {
+ Expect.equals(0, exitCode);
+ asyncEnd();
+ });
+ });
+ }
+}
+
void testListenCancel() {
for (int i = 0; i < 10; i++) {
@@ -95,4 +123,12 @@
testSignal(ProcessSignal.SIGUSR1);
testSignal(ProcessSignal.SIGUSR2);
testSignal(ProcessSignal.SIGWINCH);
+
+ testMultipleSignals([
+ ProcessSignal.SIGHUP,
+ ProcessSignal.SIGINT,
+ ProcessSignal.SIGTERM,
+ ProcessSignal.SIGUSR1,
+ ProcessSignal.SIGUSR2,
+ ProcessSignal.SIGWINCH]);
}
diff --git a/tools/VERSION b/tools/VERSION
index 637a721..5cf5da2 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
MINOR 4
PATCH 0
PRERELEASE 6
-PRERELEASE_PATCH 6
+PRERELEASE_PATCH 7