Index: runtime/vm/port.cc |
=================================================================== |
--- runtime/vm/port.cc (revision 1904) |
+++ runtime/vm/port.cc (working copy) |
@@ -75,6 +75,15 @@ |
} |
+void PortMap::SetLive(Dart_Port port) { |
+ MutexLocker ml(mutex_); |
+ intptr_t index = FindPort(port); |
+ ASSERT(index >= 0); |
+ map_[index].live = true; |
+ map_[index].isolate->increment_live_ports(); |
+} |
+ |
+ |
void PortMap::MaintainInvariants() { |
intptr_t empty = capacity_ - used_ - deleted_; |
if (used_ > ((capacity_ / 4) * 3)) { |
@@ -90,12 +99,12 @@ |
Dart_Port PortMap::CreatePort() { |
Isolate* isolate = Isolate::Current(); |
- |
MutexLocker ml(mutex_); |
Entry entry; |
entry.port = AllocatePort(); |
entry.isolate = isolate; |
+ entry.live = false; |
// Search for the first unused slot. Make use of the knowledge that here is |
// currently no port with this id in the port map. |
@@ -119,7 +128,7 @@ |
deleted_--; |
} |
map_[index] = entry; |
- isolate->increment_active_ports(); |
+ isolate->increment_num_ports(); |
// Increment number of used slots and grow if necessary. |
used_++; |
@@ -145,7 +154,10 @@ |
// pending messages below. |
map_[index].port = 0; |
map_[index].isolate = deleted_entry_; |
- isolate->decrement_active_ports(); |
+ isolate->decrement_num_ports(); |
+ if (map_[index].live) { |
+ isolate->decrement_live_ports(); |
+ } |
used_--; |
deleted_++; |
@@ -169,7 +181,7 @@ |
// Mark the slot as deleted. |
map_[i].port = 0; |
map_[i].isolate = deleted_entry_; |
- isolate->decrement_active_ports(); |
+ isolate->decrement_num_ports(); |
used_--; |
deleted_++; |
@@ -185,12 +197,6 @@ |
} |
-bool PortMap::IsActivePort(Dart_Port port) { |
- MutexLocker ml(mutex_); |
- return (FindPort(port) >= 0); |
-} |
- |
- |
bool PortMap::PostMessage(Dart_Port dest_port, |
Dart_Port reply_port, |
Dart_Message message) { |