summaryrefslogtreecommitdiff
path: root/ace
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>2001-08-08 14:24:31 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>2001-08-08 14:24:31 +0000
commitbf799f935b21885f8491db15dda0f49c6b8818c7 (patch)
tree209213071136768c4dbf03b15555104b4b3d9a22 /ace
parentae71a6261d23205d926b46d7ec62e3bbc8369555 (diff)
downloadATCD-bf799f935b21885f8491db15dda0f49c6b8818c7.tar.gz
ChangeLogTag:Wed Aug 8 06:21:24 2001 Douglas C. Schmidt <schmidt@macarena.cs.wustl.edu>
Diffstat (limited to 'ace')
-rw-r--r--ace/ACE.cpp20
-rw-r--r--ace/ACE.h3
-rw-r--r--ace/Asynch_IO.h4
-rw-r--r--ace/Asynch_IO_Impl.h4
-rw-r--r--ace/CDR_Stream.i4
-rw-r--r--ace/FILE_IO.h10
-rw-r--r--ace/FILE_IO.i12
-rw-r--r--ace/Makefile2
-rw-r--r--ace/OS.h2
-rw-r--r--ace/OS_Dirent.inl2
-rw-r--r--ace/SOCK_Stream.h20
-rw-r--r--ace/SOCK_Stream.i12
-rw-r--r--ace/Svc_Handler.cpp64
-rw-r--r--ace/Svc_Handler.h4
-rw-r--r--ace/WIN32_Asynch_IO.cpp8
-rw-r--r--ace/WIN32_Asynch_IO.h4
-rw-r--r--ace/config-win32-common.h10
17 files changed, 94 insertions, 91 deletions
diff --git a/ace/ACE.cpp b/ace/ACE.cpp
index f026ba8ec28..0e351575fcc 100644
--- a/ace/ACE.cpp
+++ b/ace/ACE.cpp
@@ -1273,7 +1273,7 @@ ACE::recv_n (ACE_HANDLE handle,
size_t &bytes_transferred = bt == 0 ? temp : *bt;
bytes_transferred = 0;
- iovec iov[IOV_MAX];
+ iovec iov[ACE_IOV_MAX];
int iovcnt = 0;
while (message_block != 0)
@@ -1297,10 +1297,10 @@ ACE::recv_n (ACE_HANDLE handle,
iovcnt++;
// The buffer is full make a OS call. @@ TODO find a way to
- // find IOV_MAX for platforms that do not define it rather
- // than simply setting IOV_MAX to some arbitrary value such
+ // find ACE_IOV_MAX for platforms that do not define it rather
+ // than simply setting ACE_IOV_MAX to some arbitrary value such
// as 16.
- if (iovcnt == IOV_MAX)
+ if (iovcnt == ACE_IOV_MAX)
{
size_t current_transfer = 0;
@@ -1331,7 +1331,7 @@ ACE::recv_n (ACE_HANDLE handle,
}
// Check for remaining buffers to be sent. This will happen when
- // IOV_MAX is not a multiple of the number of message blocks.
+ // ACE_IOV_MAX is not a multiple of the number of message blocks.
if (iovcnt != 0)
{
size_t current_transfer = 0;
@@ -2077,7 +2077,7 @@ ACE::send_n (ACE_HANDLE handle,
size_t &bytes_transferred = bt == 0 ? temp : *bt;
bytes_transferred = 0;
- iovec iov[IOV_MAX];
+ iovec iov[ACE_IOV_MAX];
int iovcnt = 0;
while (message_block != 0)
@@ -2101,10 +2101,10 @@ ACE::send_n (ACE_HANDLE handle,
iovcnt++;
// The buffer is full make a OS call. @@ TODO find a way to
- // find IOV_MAX for platforms that do not define it rather
- // than simply setting IOV_MAX to some arbitrary value such
+ // find ACE_IOV_MAX for platforms that do not define it rather
+ // than simply setting ACE_IOV_MAX to some arbitrary value such
// as 16.
- if (iovcnt == IOV_MAX)
+ if (iovcnt == ACE_IOV_MAX)
{
size_t current_transfer = 0;
@@ -2135,7 +2135,7 @@ ACE::send_n (ACE_HANDLE handle,
}
// Check for remaining buffers to be sent. This will happen when
- // IOV_MAX is not a multiple of the number of message blocks.
+ // ACE_IOV_MAX is not a multiple of the number of message blocks.
if (iovcnt != 0)
{
size_t current_transfer = 0;
diff --git a/ace/ACE.h b/ace/ACE.h
index 7f348596986..2f348b87ded 100644
--- a/ace/ACE.h
+++ b/ace/ACE.h
@@ -276,6 +276,9 @@ public:
const ACE_Time_Value *timeout = 0,
size_t *bytes_transferred = 0);
+ /// Send all the <message_block>s chained through their <next> and
+ /// <cont> pointers. This call uses the underlying OS gather-write
+ /// operationto reduce the domain-crossing penalty.
static ssize_t send_n (ACE_HANDLE handle,
const ACE_Message_Block *message_block,
const ACE_Time_Value *timeout = 0,
diff --git a/ace/Asynch_IO.h b/ace/Asynch_IO.h
index d7fb6de39d1..311650d33ee 100644
--- a/ace/Asynch_IO.h
+++ b/ace/Asynch_IO.h
@@ -1077,7 +1077,7 @@ public:
* errno to get the error code.
*
* Scatter/gather is supported on WIN32 by using the <message_block->cont()>
- * method. Up to IOV_MAX <message_block>'s are supported. Upto
+ * method. Up to ACE_IOV_MAX <message_block>'s are supported. Upto
* <message_block->size()> bytes will be read into each <message block> for
* a total of <message_block->total_size()> bytes. All <message_block>'s
* <wr_ptr>'s will be updated to reflect the added bytes for each
@@ -1212,7 +1212,7 @@ public:
* errno to get the error code.
*
* Scatter/gather is supported on WIN32 by using the <message_block->cont()>
- * method. Up to IOV_MAX <message_block>'s are supported. Upto
+ * method. Up to ACE_IOV_MAX <message_block>'s are supported. Upto
* <message_block->length()> bytes will be sent from each <message block>
* for a total of <message_block->total_length()> bytes. All
* <message_block>'s <rd_ptr>'s will be updated to reflect the bytes sent
diff --git a/ace/Asynch_IO_Impl.h b/ace/Asynch_IO_Impl.h
index b2b8820806a..5137145534d 100644
--- a/ace/Asynch_IO_Impl.h
+++ b/ace/Asynch_IO_Impl.h
@@ -530,7 +530,7 @@ public:
* errno to get the error code.
*
* Scatter/gather is supported on WIN32 by using the <message_block->cont()>
- * method. Up to IOV_MAX <message_block>'s are supported. Upto
+ * method. Up to ACE_IOV_MAX <message_block>'s are supported. Upto
* <message_block->size()> bytes will be read into each <message block> for
* a total of <message_block->total_size()> bytes. All <message_block>'s
* <wr_ptr>'s will be updated to reflect the added bytes for each
@@ -616,7 +616,7 @@ public:
* errno to get the error code.
*
* Scatter/gather is supported on WIN32 by using the <message_block->cont()>
- * method. Up to IOV_MAX <message_block>'s are supported. Upto
+ * method. Up to ACE_IOV_MAX <message_block>'s are supported. Upto
* <message_block->length()> bytes will be sent from each <message block>
* for a total of <message_block->total_length()> bytes. All
* <message_block>'s <rd_ptr>'s will be updated to reflect the bytes sent
diff --git a/ace/CDR_Stream.i b/ace/CDR_Stream.i
index 80bf3ce7fd7..400c1b9d3e9 100644
--- a/ace/CDR_Stream.i
+++ b/ace/CDR_Stream.i
@@ -164,12 +164,12 @@ ACE_OutputCDR::reset (void)
}
-// Decode the CDR stream.
+// Encode the CDR stream.
ACE_INLINE ACE_CDR::Boolean
ACE_OutputCDR::write_octet (ACE_CDR::Octet x)
{
- return this->write_1 (ACE_reinterpret_cast (const ACE_CDR::Octet*,&x));
+ return this->write_1 (ACE_reinterpret_cast (const ACE_CDR::Octet *, &x));
}
ACE_INLINE ACE_CDR::Boolean
diff --git a/ace/FILE_IO.h b/ace/FILE_IO.h
index 512ace0fdba..817da5d1e68 100644
--- a/ace/FILE_IO.h
+++ b/ace/FILE_IO.h
@@ -25,6 +25,9 @@
// Used in the FILE_IO.h file...
#include "ace/ACE.h"
+// Forward decl.
+class ACE_Message_Block;
+
/**
* @class ACE_FILE_IO
*
@@ -48,6 +51,13 @@ public:
/// Send n bytes, keep trying until n are sent.
ssize_t send_n (const void *buf, size_t n) const;
+ /// Send all the <message_block>s chained through their <next> and
+ /// <cont> pointers. This call uses the underlying OS gather-write
+ /// operationto reduce the domain-crossing penalty.
+ ssize_t send_n (const ACE_Message_Block *message_block,
+ const ACE_Time_Value *timeout = 0,
+ size_t *bytes_transferred = 0);
+
/// Recv n bytes, keep trying until n are received.
ssize_t recv_n (void *buf, size_t n) const;
diff --git a/ace/FILE_IO.i b/ace/FILE_IO.i
index ab5956c468c..d5739e6406e 100644
--- a/ace/FILE_IO.i
+++ b/ace/FILE_IO.i
@@ -12,6 +12,18 @@ ACE_FILE_IO::sendv_n (const iovec iov[], size_t n) const
n);
}
+ASYS_INLINE ssize_t
+ACE_FILE_IO::send_n (const ACE_Message_Block *message_block,
+ const ACE_Time_Value *timeout,
+ size_t *bytes_transferred)
+{
+ ACE_TRACE ("ACE_FILE_IO::send_n");
+ return ACE::send_n (this->get_handle (),
+ message_block,
+ timeout,
+ bytes_transferred);
+}
+
// Recv an n byte message from the file.
ASYS_INLINE ssize_t
diff --git a/ace/Makefile b/ace/Makefile
index 2f1bc6c9bf5..1a983aab876 100644
--- a/ace/Makefile
+++ b/ace/Makefile
@@ -42,6 +42,7 @@ UTILS_FILES = \
Handle_Set \
Init_ACE \
Lib_Find \
+ Message_Block \
Method_Request \
Object_Manager \
Registry \
@@ -187,7 +188,6 @@ STREAMS_FILES = \
CDR_Base \
CDR_Stream \
Codeset_IBM1047 \
- Message_Block \
Message_Queue \
Task
MEMORY_FILES = \
diff --git a/ace/OS.h b/ace/OS.h
index 5b6130b7f90..6f29ca41a75 100644
--- a/ace/OS.h
+++ b/ace/OS.h
@@ -2976,6 +2976,8 @@ typedef unsigned int size_t;
# define IOV_MAX 16
# endif /* IOV_MAX */
+#define ACE_IOV_MAX IOV_MAX
+
# if defined (ACE_PSOS_SNARFS_HEADER_INFO)
// Header information snarfed from compiler provided header files
// that are not included because there is already an identically
diff --git a/ace/OS_Dirent.inl b/ace/OS_Dirent.inl
index f9e0e7bceda..6f5574c8d7a 100644
--- a/ace/OS_Dirent.inl
+++ b/ace/OS_Dirent.inl
@@ -55,7 +55,7 @@ ACE_OS_Dirent::closedir (ACE_DIR *d)
# if defined (ACE_WIN32)
ACE_OS_Dirent::closedir_emulation (d);
- delete d->directory_name_;
+ delete [] d->directory_name_;
delete d;
# else /* ACE_WIN32 */
::closedir (d);
diff --git a/ace/SOCK_Stream.h b/ace/SOCK_Stream.h
index 6738b250dc5..f478702aaaa 100644
--- a/ace/SOCK_Stream.h
+++ b/ace/SOCK_Stream.h
@@ -22,6 +22,9 @@
#include "ace/INET_Addr.h"
+// Forward declarations.
+class ACE_Message_Block;
+
/**
* @class ACE_SOCK_Stream
*
@@ -78,38 +81,45 @@ public:
// = I/O functions.
- /// Try to recv exactly <len> bytes into <buf> from <handle>.
+ /// Try to recv exactly <len> bytes into <buf> from the connected socket.
ssize_t recv_n (void *buf,
size_t len,
int flags,
const ACE_Time_Value *timeout = 0,
size_t *bytes_transferred = 0) const;
- /// Try to recv exactly <len> bytes into <buf> from <handle>.
+ /// Try to recv exactly <len> bytes into <buf> from the connected socket.
ssize_t recv_n (void *buf,
size_t len,
const ACE_Time_Value *timeout = 0,
size_t *bytes_transferred = 0) const;
- /// Receive an <iovec> of size <iovcnt> to the connected socket.
+ /// Receive an <iovec> of size <iovcnt> from the connected socket.
ssize_t recvv_n (iovec iov[],
size_t iovcnt,
const ACE_Time_Value *timeout = 0,
size_t *bytes_transferred = 0) const;
- /// Try to send exactly <len> bytes into <buf> from <handle>.
+ /// Try to send exactly <len> bytes from <buf> to the connection socket.
ssize_t send_n (const void *buf,
size_t len,
int flags,
const ACE_Time_Value *timeout = 0,
size_t *bytes_transferred = 0) const;
- /// Try to send exactly <len> bytes into <buf> from <handle>.
+ /// Try to send exactly <len> bytes from <buf> to the connected socket.
ssize_t send_n (const void *buf,
size_t len,
const ACE_Time_Value *timeout = 0,
size_t *bytes_transferred = 0) const;
+ /// Send all the <message_block>s chained through their <next> and
+ /// <cont> pointers. This call uses the underlying OS gather-write
+ /// operation to reduce the domain-crossing penalty.
+ ssize_t send_n (const ACE_Message_Block *message_block,
+ const ACE_Time_Value *timeout = 0,
+ size_t *bytes_transferred = 0) const;
+
/// Send an <iovec> of size <iovcnt> to the connected socket.
ssize_t sendv_n (const iovec iov[],
size_t iovcnt,
diff --git a/ace/SOCK_Stream.i b/ace/SOCK_Stream.i
index 4f483f43a03..0684e069832 100644
--- a/ace/SOCK_Stream.i
+++ b/ace/SOCK_Stream.i
@@ -133,6 +133,18 @@ ACE_SOCK_Stream::sendv_n (const iovec iov[],
}
ASYS_INLINE ssize_t
+ACE_SOCK_Stream::send_n (const ACE_Message_Block *message_block,
+ const ACE_Time_Value *timeout,
+ size_t *bytes_transferred) const
+{
+ ACE_TRACE ("ACE_SOCK_Stream::send_n");
+ return ACE::send_n (this->get_handle (),
+ message_block,
+ timeout,
+ bytes_transferred);
+}
+
+ASYS_INLINE ssize_t
ACE_SOCK_Stream::send_urg (const void *ptr,
size_t len,
const ACE_Time_Value *timeout) const
diff --git a/ace/Svc_Handler.cpp b/ace/Svc_Handler.cpp
index 2d5a78e0423..bba9693cca0 100644
--- a/ace/Svc_Handler.cpp
+++ b/ace/Svc_Handler.cpp
@@ -419,70 +419,24 @@ template <PR_ST_1, ACE_SYNCH_DECL> int
ACE_Buffered_Svc_Handler<PR_ST_2, ACE_SYNCH_USE>::flush (void)
{
ACE_GUARD_RETURN (ACE_SYNCH_MUTEX_T, m, this->msg_queue ()->lock (), -1);
- ACE_Message_Block *entry = 0;
- iovec iov[IOV_MAX];
- size_t i = 0;
- int result = 0;
- // Iterate over all the <ACE_Message_Block>s in the
- // <ACE_Message_Queue> and prepare them to be written out.
- for (ACE_Message_Queue_Iterator<ACE_SYNCH_USE> iterator (*this->msg_queue ());
- iterator.next (entry) != 0
- && result == 0;
- iterator.advance ())
- {
- // Iterate over all the <Message_Block>s in a chain, including
- // continuations.
- for (ACE_Message_Block *temp = entry;
- temp != 0;
- temp = temp->cont ())
- {
- iov[i].iov_len = temp->length ();
- iov[i].iov_base = temp->rd_ptr ();
-
- i++;
-
- // Flush the <iovec>s when we've reached the maximum size
- // for the platform.
- if (i == IOV_MAX)
- {
-#if defined (ACE_DEBUGGING)
- ACE_DEBUG ((LM_DEBUG,
- "sending data (inside loop, i = %d)\n",
- i));
-#endif /* ACE_DEBUGGING */
- // Send off the data.
- if (this->peer ().sendv_n (iov,
- i) == -1)
- {
- result = -1;
- break;
- }
- i = 0;
- }
- }
- }
+ ACE_Message_Queue_Iterator<ACE_SYNCH_USE> iterator (*this->msg_queue ());
+ ACE_Message_Block *mblk;
+ int result = 0;
- // Take care of any remaining <iovec>s.
- if (i > 0 && result != -1)
- {
- if (this->peer ().sendv_n (iov, i) == -1)
- result = -1;
-#if defined (ACE_DEBUGGING)
- ACE_DEBUG ((LM_DEBUG,
- "sending data (final flush, i = %d)\n",
- i));
-#endif /* ACE_DEBUGGING */
- }
+ // Get the first <ACE_Message_Block> so that we can write everything
+ // out via the <send_n>.
+ if (iterator.next (mblk) != 0)
+ result = this->peer ().send_n (mblk);
// Remove all the <ACE_Message_Block>s in the <ACE_Message_Queue>
// and <release> their memory.
while (this->msg_queue ()->is_empty () == 0)
{
- if (this->msg_queue ()->dequeue_head (entry) == -1)
+ if (this->msg_queue ()->dequeue_head (mblk) == -1)
break;
- entry->release ();
+ mblk->release ();
}
if (this->timeoutp_ != 0)
diff --git a/ace/Svc_Handler.h b/ace/Svc_Handler.h
index fb0a18776fc..1be057134cb 100644
--- a/ace/Svc_Handler.h
+++ b/ace/Svc_Handler.h
@@ -6,11 +6,11 @@
*
* $Id$
*
- * @author Doug Schmidt and Irfan Pyrarli.
+ * @author Douglas Schmidt <schmidt@cs.wustl.edu> and
+ * Irfan Pyrarli <irfan@cs.wustl.edu>
*/
//=============================================================================
-
#ifndef ACE_SVC_HANDLER_H
#define ACE_SVC_HANDLER_H
#include "ace/pre.h"
diff --git a/ace/WIN32_Asynch_IO.cpp b/ace/WIN32_Asynch_IO.cpp
index 86730f3e2b9..69d504e3792 100644
--- a/ace/WIN32_Asynch_IO.cpp
+++ b/ace/WIN32_Asynch_IO.cpp
@@ -1938,14 +1938,14 @@ ACE_WIN32_Asynch_Read_Dgram::recv (ACE_Message_Block *message_block,
-1);
// do the scatter/gather recv
- iovec iov[IOV_MAX];
+ iovec iov[ACE_IOV_MAX];
int iovcnt = 0;
for (const ACE_Message_Block* msg = message_block; msg != 0; msg = msg->cont ())
{
iov[iovcnt].iov_base = msg->wr_ptr ();
iov[iovcnt].iov_len = msg->size ();
++iovcnt;
- if (iovcnt >= IOV_MAX)
+ if (iovcnt >= ACE_IOV_MAX)
{
delete result;
return -1;
@@ -2218,14 +2218,14 @@ ACE_WIN32_Asynch_Write_Dgram::send (ACE_Message_Block *message_block,
-1);
// do the scatter/gather recv
- iovec iov[IOV_MAX];
+ iovec iov[ACE_IOV_MAX];
int iovcnt = 0;
for (const ACE_Message_Block* msg = message_block; msg != 0; msg = msg->cont ())
{
iov[iovcnt].iov_base = msg->rd_ptr ();
iov[iovcnt].iov_len = msg->length ();
++iovcnt;
- if (iovcnt >= IOV_MAX)
+ if (iovcnt >= ACE_IOV_MAX)
{
delete result;
return -1;
diff --git a/ace/WIN32_Asynch_IO.h b/ace/WIN32_Asynch_IO.h
index 7348967cf4d..8dba2c3cbfc 100644
--- a/ace/WIN32_Asynch_IO.h
+++ b/ace/WIN32_Asynch_IO.h
@@ -1396,7 +1396,7 @@ public:
* errno to get the error code.
*
* Scatter/gather is supported on WIN32 by using the <message_block->cont()>
- * method. Up to IOV_MAX <message_block>'s are supported. Upto
+ * method. Up to ACE_IOV_MAX <message_block>'s are supported. Upto
* <message_block->size()> bytes will be read into each <message block> for
* a total of <message_block->total_size()> bytes. All <message_block>'s
* <wr_ptr>'s will be updated to reflect the added bytes for each
@@ -1578,7 +1578,7 @@ public:
* errno to get the error code.
*
* Scatter/gather is supported on WIN32 by using the <message_block->cont()>
- * method. Up to IOV_MAX <message_block>'s are supported. Upto
+ * method. Up to ACE_IOV_MAX <message_block>'s are supported. Upto
* <message_block->length()> bytes will be sent from each <message block>
* for a total of <message_block->total_length()> bytes. All
* <message_block>'s <rd_ptr>'s will be updated to reflect the bytes sent
diff --git a/ace/config-win32-common.h b/ace/config-win32-common.h
index 94fbb1edca4..cfd78ba0542 100644
--- a/ace/config-win32-common.h
+++ b/ace/config-win32-common.h
@@ -186,14 +186,14 @@
// that can be transferred by the scatter/gather type of I/O
// functions, e.g., WSASend and WSARecv. We are arbitrarily setting
// this to be 1k for now. The typically use case is to create an I/O
-// vector array of size IOV_MAX on the stack and then filled in. Note
-// that we probably don't want too big a value for IOV_MAX since it
+// vector array of size ACE_IOV_MAX on the stack and then filled in. Note
+// that we probably don't want too big a value for ACE_IOV_MAX since it
// may mostly go to waste or the size of the activation record may
// become excessively large.
//
-#if !defined (IOV_MAX)
-# define IOV_MAX 1024
-#endif /* IOV_MAX */
+#if !defined (ACE_IOV_MAX)
+# define ACE_IOV_MAX 1024
+#endif /* ACE_IOV_MAX */
#if !defined (ACE_HAS_WINCE)
// Platform supports pread() and pwrite()