summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>2006-09-25 16:34:03 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>2006-09-25 16:34:03 +0000
commitd8c23877a07e448adf58ab3bf5baa4567f8681a5 (patch)
tree3a858c9a3eb660f38595c202e0c67e18148e0b73
parent511df3a89f24a478f1578569199cf67be588454c (diff)
downloadATCD-d8c23877a07e448adf58ab3bf5baa4567f8681a5.tar.gz
ChangeLogTag:Mon
-rw-r--r--ACE/ChangeLog10
-rw-r--r--ACE/ace/ACE.cpp4
2 files changed, 14 insertions, 0 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog
index a63b483848b..83fe816a154 100644
--- a/ACE/ChangeLog
+++ b/ACE/ChangeLog
@@ -1,3 +1,13 @@
+Mon Sep 25 16:29:42 UTC 2006 Douglas C. Schmidt <schmidt@dre.vanderbilt.edu>
+
+ * ace/ACE.cpp (send_n_i): Conditionally removed the check for
+ errno == ENOBUFS because Winsock send, or WSASend will try to
+ enqueue all buffer at once (to the kernel) and if not it will
+ return ENOBUFS, in which case the socket is always ready for
+ writing but actually winsock can never perform such write and we
+ have endless loop. Thanks to Aleksandar Vukajlovic <vukajlo at
+ finsoft dot co dot yu> for reporting this and suggesting a fix.
+
Mon Sep 25 11:39:35 UTC 2006 Boris Kolpackov <boris@codesynthesis.com>
* ace/Bound_Ptr.inl:
diff --git a/ACE/ace/ACE.cpp b/ACE/ace/ACE.cpp
index 5367e60018d..ae6b1fb8031 100644
--- a/ACE/ace/ACE.cpp
+++ b/ACE/ace/ACE.cpp
@@ -1430,7 +1430,11 @@ ACE::send_n_i (ACE_HANDLE handle,
if (n == -1)
{
// Check for possible blocking.
+#if defined (ACE_WIN32)
+ if (errno == EWOULDBLOCK) // If enobufs no need to loop
+#else
if (errno == EWOULDBLOCK || errno == ENOBUFS)
+#endif /* ACE_WIN32 */
{
// Wait for the blocking to subside.
int result = ACE::handle_write_ready (handle,