Index: runtime/bin/process_linux.cc |
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc |
index 4e1ae8c73d749e5fdaff01fe7e2c35ce36dd7b6b..342d600e498a3ccebe6b8f3f21e3ead4e3c15527 100644 |
--- a/runtime/bin/process_linux.cc |
+++ b/runtime/bin/process_linux.cc |
@@ -999,7 +999,10 @@ intptr_t Process::SetSignalHandler(intptr_t signal) { |
} |
-void Process::ClearSignalHandler(intptr_t signal) { |
+void Process::ClearSignalHandler(intptr_t signal, Dart_Port port) { |
+ // Either the port is illegal or there is no current isolate, but not both. |
+ ASSERT((port != ILLEGAL_PORT) || (Dart_CurrentIsolate() == NULL)); |
+ ASSERT((port == ILLEGAL_PORT) || (Dart_CurrentIsolate() != NULL)); |
ThreadSignalBlocker blocker(kSignalsCount, kSignals); |
MutexLocker lock(signal_mutex); |
SignalInfo* handler = signal_handlers; |
@@ -1007,7 +1010,7 @@ void Process::ClearSignalHandler(intptr_t signal) { |
while (handler != NULL) { |
bool remove = false; |
if (handler->signal() == signal) { |
- if (handler->port() == Dart_GetMainPortId()) { |
+ if ((port == ILLEGAL_PORT) || (handler->port() == port)) { |
if (signal_handlers == handler) { |
signal_handlers = handler->next(); |
} |