diff options
Diffstat (limited to 'TAO/tao/Transport.cpp')
-rw-r--r-- | TAO/tao/Transport.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/TAO/tao/Transport.cpp b/TAO/tao/Transport.cpp index 9494364a241..ea6e73f1382 100644 --- a/TAO/tao/Transport.cpp +++ b/TAO/tao/Transport.cpp @@ -987,6 +987,16 @@ TAO_Transport::drain_queue_helper (int &iovcnt, iovec iov[], if (errno == EWOULDBLOCK || errno == EAGAIN) { + if (this->orb_core ()->flushing_strategy ()->is_blocking ()) + { + // If the flushing strategy has "blocking" behavior, we can't + // return 0 here because it would loop indefinitely calling + // back into handle_output() and returning EWOULDBLOCK. + // This is an error condition because TAO can't handle an + // EWOULDBLOCK with a blocking flushing strategy. + return -1; + } + return 0; } |