Index: mojo/edk/system/local_data_pipe_impl.cc |
diff --git a/mojo/edk/system/local_data_pipe_impl.cc b/mojo/edk/system/local_data_pipe_impl.cc |
index 7c05c2248eba5d23500c9ff2c66f833fc5ed92cc..dcb527cfbfa897127fd7fd33389ae9c6101f68dd 100644 |
--- a/mojo/edk/system/local_data_pipe_impl.cc |
+++ b/mojo/edk/system/local_data_pipe_impl.cc |
@@ -144,10 +144,18 @@ MojoResult LocalDataPipeImpl::ProducerEndWriteData(uint32_t num_bytes_written) { |
HandleSignalsState LocalDataPipeImpl::ProducerGetHandleSignalsState() const { |
HandleSignalsState rv; |
if (consumer_open()) { |
- if (current_num_bytes_ < capacity_num_bytes() && |
- !producer_in_two_phase_write()) |
- rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_WRITABLE; |
- rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_WRITABLE; |
+ if (!producer_in_two_phase_write()) { |
+ // |producer_write_threshold_num_bytes()| is always at least 1. |
+ if (capacity_num_bytes() - current_num_bytes_ >= |
+ producer_write_threshold_num_bytes()) { |
+ rv.satisfied_signals |= |
+ MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD; |
+ } else if (current_num_bytes_ < capacity_num_bytes()) { |
+ rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_WRITABLE; |
+ } |
+ } |
+ rv.satisfiable_signals |= |
+ MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD; |
} else { |
rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; |
} |