summaryrefslogtreecommitdiff
path: root/TAO/tao/Transport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Transport.cpp')
-rw-r--r--TAO/tao/Transport.cpp10
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;
}