summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-03-28 18:47:39 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-03-28 18:47:39 +0000
commitbce764199e09ab81a248f9068cc0f4a09ca0de1f (patch)
treee6f941519362bce490ad90330d8088be522aff25
parent59ab9baf39381303a5d80fb3f065b71377f2257d (diff)
downloadATCD-bce764199e09ab81a248f9068cc0f4a09ca0de1f.tar.gz
ChangeLogTag:Wed Mar 28 10:42:12 2001 Carlos O'Ryan <coryan@uci.edu>
-rw-r--r--TAO/ChangeLogs/ChangeLog-02a438
-rw-r--r--TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp41
-rw-r--r--TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.h3
-rw-r--r--TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp97
-rw-r--r--TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.h6
-rw-r--r--TAO/performance-tests/Latency/st_client.cpp13
-rw-r--r--TAO/tao/GIOP_Message_Base.cpp8
-rw-r--r--TAO/tao/GIOP_Message_Handler.cpp40
-rw-r--r--TAO/tao/GIOP_Message_Lite.cpp8
-rw-r--r--TAO/tao/IIOP_Connection_Handler.cpp42
-rw-r--r--TAO/tao/IIOP_Connection_Handler.h5
-rw-r--r--TAO/tao/IIOP_Endpoint.cpp2
-rw-r--r--TAO/tao/IIOP_Transport.cpp38
-rw-r--r--TAO/tao/IIOP_Transport.h21
-rw-r--r--TAO/tao/Makefile7
-rw-r--r--TAO/tao/ORB_Core.cpp21
-rw-r--r--TAO/tao/ORB_Core.h17
-rw-r--r--TAO/tao/ORB_Core.i5
-rw-r--r--TAO/tao/Resource_Factory.h6
-rw-r--r--TAO/tao/Strategies/SHMIOP_Connection_Handler.cpp35
-rw-r--r--TAO/tao/Strategies/SHMIOP_Transport.cpp43
-rw-r--r--TAO/tao/Strategies/SHMIOP_Transport.h9
-rw-r--r--TAO/tao/Strategies/UIOP_Connection_Handler.cpp38
-rw-r--r--TAO/tao/Strategies/UIOP_Transport.cpp39
-rw-r--r--TAO/tao/Strategies/UIOP_Transport.h12
-rw-r--r--TAO/tao/Sync_Strategies.cpp225
-rw-r--r--TAO/tao/Sync_Strategies.h92
-rw-r--r--TAO/tao/TAO.dsp48
-rw-r--r--TAO/tao/TAO_Static.dsp48
-rw-r--r--TAO/tao/Transport.cpp553
-rw-r--r--TAO/tao/Transport.h116
-rw-r--r--TAO/tao/Transport.inl37
-rw-r--r--TAO/tao/Wait_On_Leader_Follower.cpp4
-rw-r--r--TAO/tao/default_resource.cpp39
-rw-r--r--TAO/tao/default_resource.h13
-rw-r--r--TAO/tests/LongWrites/Coordinator.cpp12
-rw-r--r--TAO/tests/LongWrites/Coordinator.h17
-rw-r--r--TAO/tests/LongWrites/Makefile1486
-rw-r--r--TAO/tests/LongWrites/Receiver.cpp29
-rw-r--r--TAO/tests/LongWrites/Receiver.h9
-rw-r--r--TAO/tests/LongWrites/Sender.cpp79
-rw-r--r--TAO/tests/LongWrites/Sender.h37
-rw-r--r--TAO/tests/LongWrites/Test.idl10
-rw-r--r--TAO/tests/LongWrites/client.cpp49
-rwxr-xr-xTAO/tests/LongWrites/run_test.pl66
-rw-r--r--TAO/tests/LongWrites/server.cpp29
-rw-r--r--TAO/tests/Makefile4
-rw-r--r--TAO/tests/README4
48 files changed, 1856 insertions, 2144 deletions
diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a
index 9e05733023f..4f4053903f2 100644
--- a/TAO/ChangeLogs/ChangeLog-02a
+++ b/TAO/ChangeLogs/ChangeLog-02a
@@ -1,3 +1,441 @@
+Wed Mar 28 10:42:12 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * Another merge for the branch fixing bug 132
+
+ Tue Mar 20 09:34:53 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Transport.cpp:
+ Improved error checking for Queued_Message allocations.
+
+ Sat Mar 17 17:52:27 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Transport.h:
+ * tao/Transport.cpp:
+ Removed the current_message_ field, using the head of the queue
+ works just as well, at least as long as we always push events to
+ the end of the queue.
+
+ * tao/IIOP_Transport.h:
+ * tao/IIOP_Transport.cpp:
+ * tao/Reactive_Flushing_Strategy.cpp:
+ Use the Flushing Strategy to schedule output and cancel output
+ with the reactor.
+
+ Sat Mar 17 15:34:14 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tests/Big_Oneways/Session.h:
+ * tests/Big_Oneways/Session.cpp:
+ Fixed signed/unsigned warnings
+
+ * tests/Big_Oneways/Coordinator.cpp:
+ Print error messages in all exception cases
+
+ * tests/Big_Oneways/run_test.pl:
+ Run 3 peers to cause failures.
+
+ Fri Mar 16 15:49:26 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/IIOP_Transport.cpp:
+ Fixed debugging message for cancel_output.
+
+ * tests/Big_Oneways/Big_Oneways.dsw:
+ * tests/Big_Oneways/client.dsp:
+ * tests/Big_Oneways/server.dsp:
+ Fixed project files, the first version commited missed some
+ changes.
+
+ Thu Mar 15 10:46:52 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tests/Big_Oneways/Makefile:
+ * tests/Big_Oneways/Test.idl:
+ * tests/Big_Oneways/run_test.pl:
+ * tests/Big_Oneways/Coordinator.h:
+ * tests/Big_Oneways/Coordinator.cpp:
+ * tests/Big_Oneways/Peer.h:
+ * tests/Big_Oneways/Peer.cpp:
+ * tests/Big_Oneways/Session.h:
+ * tests/Big_Oneways/Session.cpp:
+ * tests/Big_Oneways/client.cpp:
+ * tests/Big_Oneways/server.cpp:
+ Changed the test to work more predictably on multi-CPU boxes.
+ The sessions are configured at creation time, and they don't
+ start sending events until start() is called.
+ Instead of automatically destroy them on shutdown we wait until
+ they all stop and then explicitly use a destroy() method to take
+ them down.
+
+ Tue Mar 13 15:08:06 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tests/README:
+ * tests/Makefile:
+ * tests/Big_Oneways/README:
+ * tests/Big_Oneways/Test.idl:
+ * tests/Big_Oneways/Makefile:
+ * tests/Big_Oneways/Big_Oneways.dsw:
+ * tests/Big_Oneways/server.dsp:
+ * tests/Big_Oneways/client.dsp:
+ * tests/Big_Oneways/run_test.pl:
+ * tests/Big_Oneways/Coordinator.h:
+ * tests/Big_Oneways/Coordinator.cpp:
+ * tests/Big_Oneways/Peer.h:
+ * tests/Big_Oneways/Peer.cpp:
+ * tests/Big_Oneways/Session.h:
+ * tests/Big_Oneways/Session.cpp:
+ * tests/Big_Oneways/Session_Control.h:
+ * tests/Big_Oneways/Session_Control.cpp:
+ * tests/Big_Oneways/Session_Task.h:
+ * tests/Big_Oneways/Session_Task.cpp:
+ * tests/Big_Oneways/client.cpp:
+ * tests/Big_Oneways/server.cpp:
+ Add new stress test for the non-blocking I/O features in the
+ ORB. This test is more focussed than LongWrites, and its
+ shutdown sequence is better designed (LongWrites tends to crash
+ after running successfully.)
+
+ * tao/GIOP_Message_Handler.cpp:
+ Fixed unsigned/signed warning
+
+ Thu Mar 8 19:12:48 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/GIOP_Message_Base.cpp:
+ * tao/GIOP_Message_Handler.h:
+ * tao/GIOP_Message_Handler.cpp:
+ Had to manually merge Bala's changes from Sat Feb 17 23:08:44
+ 2001.
+
+ * tao/IIOP_Connection_Handler.cpp:
+ Cosmetic fixes.
+
+ * tao/IIOP_Transport.cpp:
+ Print debugging messages when output is scheduled, and alse when
+ it is canceled.
+ Do not register the handler more than once on the reactor.
+
+ * tao/Queued_Message.inl:
+ The done() condition was reversed.
+
+ * tao/Transport.cpp:
+ Add a ton of debugging mesages, including detailed messages of
+ outgoing and incoming data, information about each queued
+ message, etc.
+
+ * tao/Transport.cpp (send_message_block_chain):
+ Always add the number of bytes transferred on each send() call,
+ even when it returns an error.
+
+ * tao/Transport.cpp (send_message_i):
+ Use easier to read code when deciding what messages are queued.
+ Before calling schedule_output() and returning we must queue the
+ message, forgot to do that in the previous version.
+
+ * tests/LongWrites/Receiver.cpp:
+ * tests/LongWrites/Sender.cpp:
+ * tests/LongWrites/Sender.h:
+ * tests/LongWrites/Sender_Task.cpp:
+ * tests/LongWrites/Sender_Task.h:
+ * tests/LongWrites/client.cpp:
+ I'm tweaking the test trying to make the termination condition
+ more reliable. Unfortunately after one of the clients finishes
+ the rest does not receive all the required messages.
+ I will probably have to change the protocol, which is probably a
+ good idea anyway, so we can control the number of threads too.
+
+ * tests/LongWrites/run_test.pl:
+ In the haste to merge the fix_bug132 bug I forgot to incorporate
+ the support for the multiple test types.
+
+ * tao/Makefile:
+ * tao/Domain/Makefile:
+ * tao/DynamicAny/Makefile:
+ * tao/DynamicInterface/Makefile:
+ * tao/IFR_Client/Makefile:
+ * tao/IORManipulation/Makefile:
+ * tao/IORTable/Makefile:
+ * tao/PortableServer/Makefile:
+ * tao/SmartProxies/Makefile:
+ * tao/Strategies/Makefile:
+ * tests/LongWrites/Makefile:
+ Update dependencies.
+
+ Wed Mar 07 08:48:11 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Queued_Message.inl:
+ Both done() and mb() were using contents_, but the flow has
+ changed to use current_message_.
+
+ * tao/Transport.cpp:
+ Simplify code flow in send_current_message()
+ Simplify code in dequeue_head()
+
+ * tao/TAO.dsp:
+ * tao/TAO_Static.dsp:
+ Update project files so they work on the branch.
+
+ Tue Mar 6 19:44:44 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/GIOP_Message_Handler.cpp:
+ When printing an invalid GIOP magic number use hex values, not
+ the character representation, because the latter can print out
+ garbage.
+
+ * tao/ORB_Core.cpp:
+ Print the return value of each handle_events() call, on an
+ attempt to figure out why it is spinning.
+
+ * tao/Transport.cpp:
+ Print handle, return value and errno after each call to
+ send_current_message()
+
+ * tao/Wait_On_Leader_Follower.cpp:
+ Don't enter the event loop if the reply has been received
+ already.
+
+ Tue Mar 6 11:02:43 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * Merged in changes from the fix_bug132 branch. I need several
+ bug fixes from the main trunk. In my experience the easiest way
+ to do this is to create a new branch higher up in the main
+ trunk, close the old branch and propagate its changes to the new
+ one.
+ In this case we created fix_bug132_iter02 (today) merge the
+ changes from fix_bug132 into that branch, and close fix_bug132.
+
+ Mon Mar 5 11:32:14 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Transport.cpp:
+ * tao/IIOP_Transport.cpp:
+ Add debugging messages
+
+ * tests/LongWrites/Makefile:
+ Updates dependencies and object files for the client.
+
+ Fri Mar 02 15:29:17 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Transport.h:
+ * tao/Transport.cpp:
+ Continue implementation of reactive output.
+ On this pass I fixed the code to deal with several error
+ conditions, invoke schedule_output() if the connection returns
+ an EWOULDBLOCK, also cancel the output if there is no data to
+ send.
+ Fix syncronization on send_queued_message()
+ Fix memory allocation for message blocks contained in
+ Queued_Message, they cannot be cloned() because that would
+ allocate from TSS.
+
+ * tao/IIOP_Transport.h:
+ * tao/IIOP_Transport.cpp:
+ Implement schedule_output() and cancel_output() methods.
+
+ * tao/Wait_On_Leader_Follower.cpp:
+ Do not re-insert the transport into the reactor on each wait,
+ once is enough.
+
+ * tao/IIOP_Connection_Handler.h:
+ * tao/IIOP_Connection_Handler.cpp:
+ Implement a handle_output() callback, delegate on the
+ TAO_Transport
+
+ * tao/IIOP_Endpoint.cpp:
+ Remove unused #include
+
+ * tests/LongWrites/Coordinator.h:
+ * tests/LongWrites/Coordinator.cpp:
+ * tests/LongWrites/Receiver.h:
+ * tests/LongWrites/Receiver.cpp:
+ * tests/LongWrites/Sender.h:
+ * tests/LongWrites/Sender.cpp:
+ * tests/LongWrites/client.cpp:
+ * tests/LongWrites/client.dsp:
+ * tests/LongWrites/run_test.pl:
+ * tests/LongWrites/server.cpp:
+ * tests/LongWrites/svc.conf:
+ * tests/LongWrites/Sender_Task.h:
+ * tests/LongWrites/Sender_Task.cpp:
+ Add support for multi-threaded clients.
+ Try to count the number of incoming messages and only exit when
+ all have been received.
+
+ * tests/Queued_Message_Test/Queued_Message_Test.dsp:
+ Removed a number of unused files from this unit test.
+
+ Sun Feb 25 10:22:59 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Queued_Message.h:
+ * tao/Queued_Message.cpp:
+ * tao/Transport.cpp:
+ Instead of releasing the message blocks as soon as possible we
+ delay until the queued message is deallocated. This will make
+ it possible to release all the data in the same thread that
+ allocated it, preserving the support for TSS allocators.
+
+ * tests/LongWrites/Test.idl:
+ * tests/LongWrites/Receiver.h:
+ * tests/LongWrites/Receiver.cpp:
+ * tests/LongWrites/Sender.h:
+ * tests/LongWrites/Sender.cpp:
+ * tests/LongWrites/client.cpp:
+ * tests/LongWrites/run_test.pl:
+ The test can now send big oneways, big twoways and big twoways
+ with big responses.
+
+ Wed Feb 14 18:38:11 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Queued_Message.cpp:
+ Fixed queue manipulation logic
+
+ * tests/Queued_Message_Test/Queued_Message_Test.cpp:
+ The test was miscounting remove operations from the queue.
+
+ * tests/Queued_Message_Test/Queued_Message_Test.dsw:
+ * tests/Queued_Message_Test/Queued_Message_Test.dsp:
+ Add MSVC project files.
+
+ Wed Feb 14 10:02:44 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Queued_Message.h:
+ * tao/Queued_Message.cpp:
+ Add flag to control message block ownership, used to minimize
+ memory allocations.
+
+ * tao/Transport.cpp:
+ Use the ownership flags for the Queued_Message.
+
+ * tests/Makefile:
+ * tests/Queued_Message_Test/Makefile:
+ * tests/Queued_Message_Test/Queued_Message_Test.cpp:
+ Add new unit test for the TAO_Queued_Message class.
+
+ * tao/Makefile:
+ * tao/Domain/Makefile:
+ * tao/DynamicAny/Makefile:
+ * tao/DynamicInterface/Makefile:
+ * tao/IFR_Client/Makefile:
+ Update dependencies
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp:
+ The ACE_SSL_SOCK_Stream does not support sendv()
+
+ Mon Feb 12 15:44:54 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Makefile:
+ Update makefile to include new files
+
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.h:
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp:
+ * tao/Strategies/SHMIOP_Transport.h:
+ * tao/Strategies/SHMIOP_Transport.cpp:
+ * tao/Strategies/UIOP_Transport.h:
+ * tao/Strategies/UIOP_Transport.cpp:
+ Fixed all protocols to use the new send() method with iovec
+ parameters.
+
+ * tao/GIOP_Message_Lite.cpp:
+ Use the send() method with iovec arguments.
+
+ * tao/Sync_Strategies.h:
+ * tao/Sync_Strategies.cpp:
+ * tao/Transport.cpp:
+ More cleanup for the Sync_Strategies, the must_queue() method
+ does not require a Stub argument.
+
+ Mon Feb 12 10:15:47 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Transport.h:
+ * tao/Transport.cpp:
+ Add new method to send a message block chain.
+ The template method to send data takes an iovec argument.
+
+ * tao/IIOP_Transport.h:
+ * tao/IIOP_Transport.cpp:
+ Implement the iovec-based send() template method.
+
+ * tao/Queued_Message.cpp:
+ The cleanup code was broken.
+
+ * tao/GIOP_Message_Base.cpp:
+ Use the message block chain method to send short critical
+ messages.
+
+ Fri Feb 09 10:50:47 2001 Carlos O'Ryan <coryan@uci.edu>
+
+ * tao/Queued_Message.h:
+ * tao/Queued_Message.inl:
+ * tao/Queued_Message.cpp:
+ Add new class to represent a queued message in the outgoing
+ path. This class has to keep more than just the message block,
+ it also takes care of timeouts and signaling any waiting thread
+ when the message is sent.
+
+ * tao/Message_Sent_Callback.h:
+ * tao/Message_Sent_Callback.inl:
+ * tao/Message_Sent_Callback.cpp:
+ Define interface to signal threads waiting for a message to be
+ sent out, e.g. twoway requests blocked waiting for a queued
+ message.
+
+ * tao/Flushing_Strategy.h:
+ * tao/Flushing_Strategy.cpp:
+ * tao/Block_Flushing_Strategy.h:
+ * tao/Block_Flushing_Strategy.cpp:
+ * tao/Reactive_Flushing_Strategy.h
+ * tao/Reactive_Flushing_Strategy.cpp:
+ New classes to control how the outgoing data is flushed,
+ either by blocking on write() or by using the reactor.
+
+ * tao/Resource_Factory.h:
+ * tao/default_resource.h:
+ * tao/default_resource.cpp:
+ Add new methods to create the flushing strategy.
+
+ * tao/ORB_Core.h:
+ * tao/ORB_Core.i:
+ * tao/ORB_Core.cpp:
+ Add accessor for the flushing strategy. Notice that the
+ strategy is stateless so a single instance (per-ORB) is needed.
+
+ * tao/Sync_Strategies.h:
+ * tao/Sync_Strategies.cpp:
+ The Sync_Strategies have been simplified. They are now
+ stateless, and they only need to answer a couple of questions
+ (1) should a message be buffered, (2) should the ORB flush a
+ queue.
+
+ * performance-tests/Latency/st_client.cpp:
+ Destroy the ORB on shutdown.
+
+ * tao/TAO.dsp:
+ * tao/TAO_Static.dsp:
+ Add the new files to the TAO project files.
+
+ * tao/Transport.h:
+ * tao/Transport.inl:
+ * tao/Transport.cpp:
+ Move much of the functionality of sending and outgoing message
+ queue up to the base transport class. Remove a lot of code
+ deailing with the previous (blocking) queues.
+
+ * tao/IIOP_Transport.cpp:
+ * tao/IIOP_Connection_Handler.cpp:
+ * tao/Strategies/SHMIOP_Transport.cpp:
+ * tao/Strategies/SHMIOP_Connection_Handler.cpp:
+ * tao/Strategies/UIOP_Transport.cpp:
+ * tao/Strategies/UIOP_Connection_Handler.cpp:
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp:
+ * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp:
+ Change the transport and connection handlers to use the new
+ outgoing message queue, the flushing strategy and the changes to
+ the SyncStrategy.
+
+ * tao/GIOP_Message_Base.cpp:
+ Propagate a few interface changes.
+
+ * tests/LongWrites/LongWrites.dsw:
+ * tests/LongWrites/client.dsp:
+ * tests/LongWrites/server.dsp:
+ * tests/LongWrites/run_test.pl:
+ Got the test to compile (and run) under NT.
+
Wed Mar 28 08:18:00 2001 Craig Rodrigues <crodrigu@bbn.com>
* orbsvcs/orbsvcs/AV/UDP.h:
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp
index 3db2b19b2d3..0a023fab609 100644
--- a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp
+++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.cpp
@@ -66,27 +66,10 @@ TAO_SSLIOP_Connection_Handler::TAO_SSLIOP_Connection_Handler (
}
-TAO_SSLIOP_Connection_Handler::
-~TAO_SSLIOP_Connection_Handler (void)
+TAO_SSLIOP_Connection_Handler::~TAO_SSLIOP_Connection_Handler (void)
{
- if (this->transport () != 0)
- {
- // If the socket has not already been closed.
- if (this->get_handle () != ACE_INVALID_HANDLE)
- {
- // Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages ();
- }
- else
- {
- // Dequeue messages and delete message blocks.
- this->transport ()->dequeue_all ();
- }
- }
}
-
-
int
TAO_SSLIOP_Connection_Handler::open (void *)
{
@@ -217,9 +200,6 @@ TAO_SSLIOP_Connection_Handler::handle_close (ACE_HANDLE handle,
// Close the handle..
if (this->get_handle () != ACE_INVALID_HANDLE)
{
- // Send the buffered messages first
- this->transport ()->send_buffered_messages ();
-
// Purge the entry too
this->transport ()->mark_invalid ();
@@ -251,23 +231,20 @@ int
TAO_SSLIOP_Connection_Handler::handle_timeout (const ACE_Time_Value &,
const void *)
{
- // This method is called when buffering timer expires.
- //
- ACE_Time_Value *max_wait_time = 0;
-
- TAO_Stub *stub = 0;
- int has_timeout;
- this->orb_core ()->call_timeout_hook (stub,
- has_timeout,
- *max_wait_time);
-
// Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages (max_wait_time);
+ if (this->transport ()->handle_output () == -1)
+ return -1;
return 0;
}
int
+TAO_IIOP_Connection_Handler::handle_output (ACE_HANDLE)
+{
+ return this->transport ()->handle_output ();
+}
+
+int
TAO_SSLIOP_Connection_Handler::add_transport_to_cache (void)
{
ACE_INET_Addr addr;
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.h b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.h
index 7fe2df23e78..7ca64c64b02 100644
--- a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.h
+++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connection_Handler.h
@@ -101,6 +101,9 @@ public:
virtual int handle_timeout (const ACE_Time_Value &tv,
const void *arg = 0);
+ /// Documented in ACE_Event_Handler
+ virtual int handle_output (ACE_HANDLE);
+
/// Add ourselves to Cache.
int add_transport_to_cache (void);
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp
index 61ea81502fe..5b89ea5c2d5 100644
--- a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp
+++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.cpp
@@ -3,12 +3,9 @@
// $Id$
#include "SSLIOP_Transport.h"
-
#include "tao/debug.h"
-ACE_RCSID (TAO_SSLIOP,
- SSLIOP_Transport,
- "$Id$")
+ACE_RCSID (TAO_SSLIOP, SSLIOP_Transport, "$Id$")
#include "SSLIOP_Connection_Handler.h"
#include "SSLIOP_Profile.h"
@@ -65,74 +62,16 @@ TAO_SSLIOP_Transport::event_handler_i (void)
}
ssize_t
-TAO_SSLIOP_Transport::send_i (const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time,
- size_t *bt)
+TAO_SSLIOP_Transport::send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *max_wait_time)
{
- // @@ This code should be refactored into ACE.cpp or something
- // similar!
-
- // For the most part this was copied from GIOP::send_request and
- // friends.
-
- size_t temp;
- size_t &bytes_transferred = bt == 0 ? temp : *bt;
-
- iovec iov[IOV_MAX];
- int iovcnt = 0;
- ssize_t n = 0;
-
- for (const ACE_Message_Block *i = message_block;
- i != 0;
- i = i->cont ())
- {
- // Make sure there is something to send!
- if (i->length () > 0)
- {
- iov[iovcnt].iov_base = i->rd_ptr ();
- iov[iovcnt].iov_len = i->length ();
- iovcnt++;
-
- // The buffer is full make a OS call. @@ TODO this should
- // be optimized on a per-platform basis, for instance, some
- // platforms do not implement writev() there we should copy
- // the data into a buffer and call send_n(). In other cases
- // there may be some limits on the size of the iovec, there
- // we should set IOV_MAX to that limit.
- if (iovcnt == IOV_MAX)
- {
- if (max_wait_time == 0)
- n = this->connection_handler_->peer ().sendv_n (iov,
- iovcnt);
- else
- // @@ No timeouts!!!
- n = this->connection_handler_->peer ().sendv_n (iov,
- iovcnt /*,
- max_wait_time */);
-
- if (n == 0 ||
- n == -1)
- return n;
-
- bytes_transferred += n;
- iovcnt = 0;
- }
- }
- }
+ ssize_t retval = this->connection_handler_->peer ().send (iov, iovcnt,
+ max_wait_time);
+ if (retval > 0)
+ bytes_transferred = retval;
- // Check for remaining buffers to be sent!
- if (iovcnt != 0)
- {
- n = this->connection_handler_->peer ().sendv_n (iov,
- iovcnt);
- if (n == 0 ||
- n == -1)
- return n;
-
- bytes_transferred += n;
- }
-
- return bytes_transferred;
+ return retval;
}
ssize_t
@@ -184,6 +123,21 @@ TAO_SSLIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time,
int
TAO_SSLIOP_Transport::register_handler_i (void)
{
+ if (TAO_debug_level > 4)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d\n",
+ this->id ()));
+ }
+ if (this->connection_handler_->is_registered ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d"
+ ", already registered\n",
+ this->id ()));
+ return 0;
+ }
+
// @@ It seems like this method should go away, the right reactor is
// picked at object creation time.
ACE_Reactor *r = this->orb_core_->reactor ();
@@ -237,7 +191,7 @@ TAO_SSLIOP_Transport::send_message (TAO_OutputCDR &stream,
// versions seem to need it though. Leaving it costs little.
// This guarantees to send all data (bytes) or return an error.
- ssize_t n = this->send_or_buffer (stub,
+ ssize_t n = this->send_message_i (stub,
twoway,
stream.begin (),
max_wait_time);
@@ -615,4 +569,3 @@ TAO_SSLIOP_Transport::connection_handler (void) const
return connection_handler_;
}
#endif
-
diff --git a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.h b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.h
index 891748a6283..a812197ef5e 100644
--- a/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.h
+++ b/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Transport.h
@@ -81,9 +81,9 @@ protected:
virtual ACE_Event_Handler *event_handler_i (void);
/// Write the complete Message_Block chain to the connection.
- virtual ssize_t send_i (const ACE_Message_Block *mblk,
- const ACE_Time_Value *s = 0,
- size_t *bytes_transferred = 0);
+ virtual ssize_t send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout = 0);
/// Read len bytes from into buf.
virtual ssize_t recv_i (char *buf,
diff --git a/TAO/performance-tests/Latency/st_client.cpp b/TAO/performance-tests/Latency/st_client.cpp
index c750a23b227..52a2dd05216 100644
--- a/TAO/performance-tests/Latency/st_client.cpp
+++ b/TAO/performance-tests/Latency/st_client.cpp
@@ -129,11 +129,11 @@ main (int argc, char *argv[])
if (TAO_debug_level > 0 && i % 100 == 0)
ACE_DEBUG ((LM_DEBUG, "(%P|%t) iteration = %d\n", i));
- if (period != -1)
- {
- ACE_Time_Value tv (0, period * 1000);
- ACE_OS::sleep (tv);
- }
+ if (period != -1)
+ {
+ ACE_Time_Value tv (0, period * 1000);
+ ACE_OS::sleep (tv);
+ }
}
ACE_hrtime_t test_end = ACE_OS::gethrtime ();
@@ -161,6 +161,9 @@ main (int argc, char *argv[])
server->shutdown (ACE_TRY_ENV);
ACE_TRY_CHECK;
}
+
+ orb->destroy (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
}
ACE_CATCHANY
{
diff --git a/TAO/tao/GIOP_Message_Base.cpp b/TAO/tao/GIOP_Message_Base.cpp
index 396e58cea40..26fd20d62b1 100644
--- a/TAO/tao/GIOP_Message_Base.cpp
+++ b/TAO/tao/GIOP_Message_Base.cpp
@@ -333,7 +333,6 @@ TAO_GIOP_Message_Base::process_request_message (TAO_Transport *transport,
this->message_handler_.message_state ().byte_order,
orb_core);
-
// input_cdr.skip_bytes (TAO_GIOP_MESSAGE_HEADER_LEN);
// Send the message state for the service layer like FT to log the
@@ -890,7 +889,8 @@ TAO_GIOP_Message_Base::send_error (TAO_Transport *transport)
ACE_Message_Block message_block(&data_block);
message_block.wr_ptr (TAO_GIOP_MESSAGE_HEADER_LEN);
- int result = transport->send (&message_block);
+ size_t bt;
+ int result = transport->send_message_block_chain (&message_block, bt);
if (result == -1)
{
if (TAO_debug_level > 0)
@@ -1024,7 +1024,9 @@ TAO_GIOP_Message_Base::
ACE_Message_Block message_block(&data_block);
message_block.wr_ptr (TAO_GIOP_MESSAGE_HEADER_LEN);
- if (transport->send (&message_block) == -1 && errno != ENOENT)
+ size_t bt;
+ int result = transport->send_message_block_chain (&message_block, bt);
+ if (result == -1)
{
if (TAO_debug_level > 0)
ACE_ERROR ((LM_ERROR,
diff --git a/TAO/tao/GIOP_Message_Handler.cpp b/TAO/tao/GIOP_Message_Handler.cpp
index 3e6695a6858..c24fb4b9334 100644
--- a/TAO/tao/GIOP_Message_Handler.cpp
+++ b/TAO/tao/GIOP_Message_Handler.cpp
@@ -19,7 +19,11 @@ TAO_GIOP_Message_Handler::TAO_GIOP_Message_Handler (TAO_ORB_Core * orb_core,
: mesg_base_ (base),
message_status_ (TAO_GIOP_WAITING_FOR_HEADER),
message_size_ (ACE_CDR::DEFAULT_BUFSIZE),
- current_buffer_ (orb_core->create_input_cdr_data_block (ACE_CDR::DEFAULT_BUFSIZE)),
+ current_buffer_ (ACE_CDR::DEFAULT_BUFSIZE),
+ // @@ This doesn't seem to work. The problem comes when we extract
+ // data portion from this buffer in the skeleton. Why?? Needs
+ // investigation.
+ // current_buffer_ (orb_core->create_input_cdr_data_block (ACE_CDR::DEFAULT_BUFSIZE)),
supp_buffer_ (ACE_CDR::DEFAULT_BUFSIZE),
message_state_ (orb_core),
orb_core_ (orb_core)
@@ -167,7 +171,8 @@ TAO_GIOP_Message_Handler::parse_magic_bytes (void)
// For the present...
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) bad header, magic word [%c%c%c%c]\n"),
+ ACE_TEXT ("TAO (%P|%t) bad header, "
+ "magic word [%2.2x,%2.2x,%2.2x,%2.2x]\n"),
buf[0],
buf[1],
buf[2],
@@ -218,9 +223,9 @@ TAO_GIOP_Message_Handler::get_payload_size (void)
if ((align_offset + x + TAO_GIOP_MESSAGE_HEADER_LEN) > this->message_size_)
{
- size_t size = ACE_CDR::MAX_ALIGNMENT +
- x +
- TAO_GIOP_MESSAGE_HEADER_LEN;
+ size_t size = ACE_CDR::MAX_ALIGNMENT +
+ x +
+ TAO_GIOP_MESSAGE_HEADER_LEN;
// @@ This must come off the allocator. For some reason when I
// use the allocator things go for a toss. Need to revisit
@@ -504,14 +509,31 @@ TAO_GIOP_Message_Handler::read_messages (TAO_Transport *transport)
return -1;
}
- // Now we have a succesful read. First adjust the write pointer
- this->current_buffer_.wr_ptr (n);
-
- if (TAO_debug_level > 8)
+ if (TAO_debug_level > 6)
{
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - GIOP_Message_Handler::read_messages"
+ " received %d bytes\n",
+ n));
+
+ size_t len;
+ for (size_t offset = 0; offset < size_t(n); offset += len)
+ {
+ len = n - offset;
+ if (len > 512)
+ len = 512;
+ ACE_HEX_DUMP ((LM_DEBUG,
+ this->current_buffer_.wr_ptr () + offset,
+ len,
+ "TAO (%P|%t) - read_messages "));
+ }
ACE_DEBUG ((LM_DEBUG, "TAO (%P|%t) - received %d bytes \n", n));
}
+ // Now we have a succesful read. First adjust the write pointer
+ this->current_buffer_.wr_ptr (n);
+
+
return 0;
}
diff --git a/TAO/tao/GIOP_Message_Lite.cpp b/TAO/tao/GIOP_Message_Lite.cpp
index 4ef083ccf55..5ada5f4765e 100644
--- a/TAO/tao/GIOP_Message_Lite.cpp
+++ b/TAO/tao/GIOP_Message_Lite.cpp
@@ -1,4 +1,4 @@
-//$Id$
+// $Id$
#include "tao/GIOP_Message_Lite.h"
#include "tao/debug.h"
@@ -16,6 +16,8 @@
# include "tao/GIOP_Message_Lite.i"
#endif /* __ACE_INLINE__ */
+ACE_RCSID(tao, GIOP_Message_Lite, "$Id$")
+
static const size_t TAO_GIOP_LITE_HEADER_LEN = 5;
static const size_t TAO_GIOP_LITE_MESSAGE_SIZE_OFFSET = 0;
static const size_t TAO_GIOP_LITE_MESSAGE_TYPE_OFFSET = 4;
@@ -1365,7 +1367,9 @@ TAO_GIOP_Message_Lite::send_error (TAO_Transport *transport)
ACE_Message_Block message_block(&data_block);
message_block.wr_ptr (TAO_GIOP_LITE_HEADER_LEN);
- int result = transport->send (&message_block);
+ size_t bt;
+ int result = transport->send_message_block_chain (&message_block,
+ bt);
if (result == -1)
{
if (TAO_debug_level > 0)
diff --git a/TAO/tao/IIOP_Connection_Handler.cpp b/TAO/tao/IIOP_Connection_Handler.cpp
index 51fa969eb97..5a91464338a 100644
--- a/TAO/tao/IIOP_Connection_Handler.cpp
+++ b/TAO/tao/IIOP_Connection_Handler.cpp
@@ -1,6 +1,5 @@
// $Id$
-
#include "tao/IIOP_Connection_Handler.h"
#include "tao/Timeprobe.h"
#include "tao/debug.h"
@@ -20,8 +19,6 @@
ACE_RCSID(tao, IIOP_Connect, "$Id$")
-
-
TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler (ACE_Thread_Manager *t)
: TAO_IIOP_SVC_HANDLER (t, 0 , 0),
TAO_Connection_Handler (0),
@@ -58,22 +55,8 @@ TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler (TAO_ORB_Core *orb_core
TAO_IIOP_Connection_Handler::~TAO_IIOP_Connection_Handler (void)
{
- if (this->transport () != 0) {
- // If the socket has not already been closed.
- if (this->get_handle () != ACE_INVALID_HANDLE)
- {
- // Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages ();
- }
- else
- {
- // Dequeue messages and delete message blocks.
- this->transport ()->dequeue_all ();
- }
- }
}
-
int
TAO_IIOP_Connection_Handler::open (void*)
{
@@ -208,9 +191,6 @@ TAO_IIOP_Connection_Handler::handle_close (ACE_HANDLE handle,
// Close the handle..
if (this->get_handle () != ACE_INVALID_HANDLE)
{
- // Send the buffered messages first
- this->transport ()->send_buffered_messages ();
-
// Mark the entry as invalid
this->transport ()->mark_invalid ();
@@ -236,28 +216,26 @@ TAO_IIOP_Connection_Handler::fetch_handle (void)
return this->get_handle ();
}
-
int
TAO_IIOP_Connection_Handler::handle_timeout (const ACE_Time_Value &,
const void *)
{
- // This method is called when buffering timer expires.
- //
- ACE_Time_Value *max_wait_time = 0;
-
- TAO_Stub *stub = 0;
- int has_timeout;
- this->orb_core ()->call_timeout_hook (stub,
- has_timeout,
- *max_wait_time);
-
// Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages (max_wait_time);
+ if (this->transport ()->handle_output () == -1)
+ {
+ return -1;
+ }
return 0;
}
int
+TAO_IIOP_Connection_Handler::handle_output (ACE_HANDLE)
+{
+ return this->transport ()->handle_output ();
+}
+
+int
TAO_IIOP_Connection_Handler::add_transport_to_cache (void)
{
ACE_INET_Addr addr;
diff --git a/TAO/tao/IIOP_Connection_Handler.h b/TAO/tao/IIOP_Connection_Handler.h
index 786bb84a0e0..9c605f1abe7 100644
--- a/TAO/tao/IIOP_Connection_Handler.h
+++ b/TAO/tao/IIOP_Connection_Handler.h
@@ -1,4 +1,5 @@
// This may look like C, but it's really -*- C++ -*-
+
// ===================================================================
/**
* @file IIOP_Connection_Handler.h
@@ -114,11 +115,15 @@ public:
virtual int handle_timeout (const ACE_Time_Value &tv,
const void *arg = 0);
+ /// Documented in ACE_Event_Handler
+ virtual int handle_output (ACE_HANDLE);
+
/// Add ourselves to Cache.
int add_transport_to_cache (void);
/// Process the <listen_list>
int process_listen_point_list (IIOP::ListenPointList &listen_list);
+
protected:
/// = Event Handler overloads
diff --git a/TAO/tao/IIOP_Endpoint.cpp b/TAO/tao/IIOP_Endpoint.cpp
index bbac4ef3f30..5b194b5d20b 100644
--- a/TAO/tao/IIOP_Endpoint.cpp
+++ b/TAO/tao/IIOP_Endpoint.cpp
@@ -3,12 +3,10 @@
#include "tao/IIOP_Endpoint.h"
-#include "tao/IIOP_Connection_Handler.h"
#include "tao/debug.h"
ACE_RCSID(tao, IIOP_Endpoint, "$Id$")
-
#if !defined (__ACE_INLINE__)
# include "tao/IIOP_Endpoint.i"
#endif /* __ACE_INLINE__ */
diff --git a/TAO/tao/IIOP_Transport.cpp b/TAO/tao/IIOP_Transport.cpp
index 16be7c5eb40..5ee3fe1743f 100644
--- a/TAO/tao/IIOP_Transport.cpp
+++ b/TAO/tao/IIOP_Transport.cpp
@@ -66,14 +66,16 @@ TAO_IIOP_Transport::event_handler_i (void)
}
ssize_t
-TAO_IIOP_Transport::send_i (const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time,
- size_t *bytes_transferred)
+TAO_IIOP_Transport::send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *max_wait_time)
{
- return ACE::send_n (this->connection_handler_->get_handle (),
- message_block,
- max_wait_time,
- bytes_transferred);
+ ssize_t retval = this->connection_handler_->peer ().sendv (iov, iovcnt,
+ max_wait_time);
+ if (retval > 0)
+ bytes_transferred = retval;
+
+ return retval;
}
ssize_t
@@ -125,6 +127,21 @@ TAO_IIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time,
int
TAO_IIOP_Transport::register_handler_i (void)
{
+ if (TAO_debug_level > 4)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d\n",
+ this->id ()));
+ }
+ if (this->connection_handler_->is_registered ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d"
+ ", already registered\n",
+ this->id ()));
+ return 0;
+ }
+
// @@ It seems like this method should go away, the right reactor is
// picked at object creation time.
ACE_Reactor *r = this->orb_core_->reactor ();
@@ -173,12 +190,8 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream,
if (this->messaging_object_->format_message (stream) != 0)
return -1;
- // Strictly speaking, should not need to loop here because the
- // socket never gets set to a nonblocking mode ... some Linux
- // versions seem to need it though. Leaving it costs little.
-
// This guarantees to send all data (bytes) or return an error.
- ssize_t n = this->send_or_buffer (stub,
+ ssize_t n = this->send_message_i (stub,
twoway,
stream.begin (),
max_wait_time);
@@ -303,7 +316,6 @@ TAO_IIOP_Transport::tear_listen_point_list (TAO_InputCDR &cdr)
return this->connection_handler_->process_listen_point_list (listen_list);
}
-
int
TAO_IIOP_Transport::process_message (void)
{
diff --git a/TAO/tao/IIOP_Transport.h b/TAO/tao/IIOP_Transport.h
index f882ef18ce2..8525c109ded 100644
--- a/TAO/tao/IIOP_Transport.h
+++ b/TAO/tao/IIOP_Transport.h
@@ -64,30 +64,21 @@ public:
protected:
/** @name Overridden Template Methods
*
- * These are implementations of template methods declared by TAO_Transport.
+ * Please check the documentation in "tao/Transport.h" for more
+ * details.
*/
//@{
- /// Access connection_handler_ as an <code>ACE_Event_Handler</code>.
- /// Must be called with transport's lock held.
virtual ACE_Event_Handler *event_handler_i (void);
- /// Write the complete Message_Block chain to the connection.
- /// Must be called with transport's lock held.
- virtual ssize_t send_i (const ACE_Message_Block *mblk,
- const ACE_Time_Value *s = 0,
- size_t *bytes_transferred = 0);
+ virtual ssize_t send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout = 0);
-
- /// Read len bytes from into buf.
- /// Must be called with transport's lock held.
virtual ssize_t recv_i (char *buf,
size_t len,
const ACE_Time_Value *s = 0);
- /// Read and process the message from the connection. The processing
- /// of the message is done by delegating the work to the underlying
- /// messaging object
virtual int read_process_message (ACE_Time_Value *max_time_value = 0,
int block =0);
@@ -129,11 +120,9 @@ public:
TAO_Target_Specification &spec,
TAO_OutputCDR &msg);
- /// Initialising the messaging object
virtual int messaging_init (CORBA::Octet major,
CORBA::Octet minor);
- /// Open the service context list and process it.
virtual int tear_listen_point_list (TAO_InputCDR &cdr);
//@}
diff --git a/TAO/tao/Makefile b/TAO/tao/Makefile
index d95897e1f8f..4125d329f3e 100644
--- a/TAO/tao/Makefile
+++ b/TAO/tao/Makefile
@@ -237,7 +237,12 @@ ORB_CORE_FILES = \
BiDir_Policy_i \
CodecFactory \
CodecFactory_ORBInitializer \
- CDR_Encaps_Codec
+ CDR_Encaps_Codec \
+ Flushing_Strategy \
+ Block_Flushing_Strategy \
+ Reactive_Flushing_Strategy \
+ Queued_Message \
+ Message_Sent_Callback
DYNAMIC_ANY_FILES =
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index ef5b2cbaea2..e2c5b63a693 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -35,6 +35,8 @@
#include "IORInfo.h"
+#include "Flushing_Strategy.h"
+
#if defined(ACE_MVS)
#include "ace/Codeset_IBM1047.h"
#endif /* ACE_MVS */
@@ -43,10 +45,7 @@
# include "ORB_Core.i"
#endif /* ! __ACE_INLINE__ */
-ACE_RCSID (TAO,
- ORB_Core,
- "$Id$")
-
+ACE_RCSID(tao, ORB_Core, "$Id$")
// ****************************************************************
@@ -158,6 +157,7 @@ TAO_ORB_Core::TAO_ORB_Core (const char *orbid)
parser_registry_ (),
transport_cache_ (),
bidir_giop_policy_ (0)
+ , flushing_strategy_ (0)
{
#if defined(ACE_MVS)
ACE_NEW (this->from_iso8859_, ACE_IBM1047_ISO8859);
@@ -221,6 +221,8 @@ TAO_ORB_Core::TAO_ORB_Core (const char *orbid)
TAO_ORB_Core::~TAO_ORB_Core (void)
{
+ delete this->flushing_strategy_;
+
ACE_OS::free (this->orbid_);
delete this->from_iso8859_;
@@ -1041,6 +1043,9 @@ TAO_ORB_Core::init (int &argc, char *argv[], CORBA::Environment &ACE_TRY_ENV)
// init the ORB core's pointer
this->protocol_factories_ = trf->get_protocol_factories ();
+ // Initialize the flushing strategy
+ this->flushing_strategy_ = trf->create_flushing_strategy ();
+
// Now that we have a complete list of available protocols and their
// related factory objects, set default policies and initialize the
// registries!
@@ -1945,9 +1950,15 @@ TAO_ORB_Core::run (ACE_Time_Value *tv,
if (TAO_debug_level >= 3)
ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("TAO (%P|%t) - blocking on handle events\n")));
+ ACE_TEXT ("TAO (%P|%t) - calling handle_events\n")));
+
result = r->handle_events (tv);
+ if (TAO_debug_level >= 3)
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - handle_events returns %d\n"),
+ result));
+
if (result == -1)
{
// An error, terminate the loop
diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h
index c27a6c4b305..859166d146e 100644
--- a/TAO/tao/ORB_Core.h
+++ b/TAO/tao/ORB_Core.h
@@ -82,6 +82,8 @@ class TAO_Message_State_Factory;
class TAO_ServerRequest;
class TAO_Protocols_Hooks;
+class TAO_Flushing_Strategy;
+
#if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
class TAO_Eager_Buffering_Sync_Strategy;
@@ -840,13 +842,21 @@ public:
CORBA::Boolean bidir_giop_policy (void);
void bidir_giop_policy (CORBA::Boolean);
-
-
/// Return the table that maps object key/name to de-stringified
/// object reference. It is needed for supporting local objects in
/// the resolve_initial_references() mechanism.
TAO_Object_Ref_Table &object_ref_table (void);
+ /// Return the flushing strategy
+ /**
+ * The flushing strategy is created by the resource factory, and it
+ * is used by the ORB to control the mechanism used to flush the
+ * outgoing data queues.
+ * The flushing strategies are stateless, therefore, there is only
+ * one per ORB.
+ */
+ TAO_Flushing_Strategy *flushing_strategy (void);
+
protected:
/// Destructor is protected since the ORB Core is a reference
@@ -1185,6 +1195,9 @@ protected:
/// Bir Dir GIOP policy value
CORBA::Boolean bidir_giop_policy_;
+
+ /// Hold the flushing strategy
+ TAO_Flushing_Strategy *flushing_strategy_;
};
// ****************************************************************
diff --git a/TAO/tao/ORB_Core.i b/TAO/tao/ORB_Core.i
index b84892c001d..06aa46dbb36 100644
--- a/TAO/tao/ORB_Core.i
+++ b/TAO/tao/ORB_Core.i
@@ -47,6 +47,11 @@ TAO_ORB_Core::object_ref_table (void)
return this->object_ref_table_;
}
+ACE_INLINE TAO_Flushing_Strategy *
+TAO_ORB_Core::flushing_strategy (void)
+{
+ return this->flushing_strategy_;
+}
ACE_INLINE CORBA::Boolean
TAO_ORB_Core::service_profile_selection (TAO_MProfile &mprofile,
diff --git a/TAO/tao/Resource_Factory.h b/TAO/tao/Resource_Factory.h
index 94d5d114952..2e434c08eb6 100644
--- a/TAO/tao/Resource_Factory.h
+++ b/TAO/tao/Resource_Factory.h
@@ -32,6 +32,8 @@ class TAO_Connector_Registry;
class TAO_Reactor_Registry;
class TAO_Priority_Mapping;
+class TAO_Flushing_Strategy;
+
// ****************************************************************
class TAO_Export TAO_Protocol_Item
@@ -181,6 +183,10 @@ public:
/// Creates the lock for the lock needed in the Cache Map
virtual ACE_Lock *create_cached_connection_lock (void);
+ /// Creates the flushing strategy. The new instance is owned by the
+ /// caller.
+ virtual TAO_Flushing_Strategy *create_flushing_strategy (void) = 0;
+
protected:
/**
* Loads the default protocols. This method is used so that the
diff --git a/TAO/tao/Strategies/SHMIOP_Connection_Handler.cpp b/TAO/tao/Strategies/SHMIOP_Connection_Handler.cpp
index 14236742606..a2aa21eda6b 100644
--- a/TAO/tao/Strategies/SHMIOP_Connection_Handler.cpp
+++ b/TAO/tao/Strategies/SHMIOP_Connection_Handler.cpp
@@ -22,8 +22,6 @@
ACE_RCSID(Strategies, SHMIOP_Connect, "$Id$")
-
-
TAO_SHMIOP_Connection_Handler::TAO_SHMIOP_Connection_Handler (ACE_Thread_Manager *t)
: TAO_SHMIOP_SVC_HANDLER (t, 0 , 0),
TAO_Connection_Handler (0),
@@ -57,23 +55,8 @@ TAO_SHMIOP_Connection_Handler::TAO_SHMIOP_Connection_Handler (TAO_ORB_Core *orb_
TAO_SHMIOP_Connection_Handler::~TAO_SHMIOP_Connection_Handler (void)
{
- if (this->transport () != 0)
- {
- // If the socket has not already been closed.
- if (this->get_handle () != ACE_INVALID_HANDLE)
- {
- // Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages ();
- }
- else
- {
- // Dequeue messages and delete message blocks.
- this->transport ()->dequeue_all ();
- }
- }
}
-
int
TAO_SHMIOP_Connection_Handler::open (void*)
{
@@ -211,9 +194,6 @@ TAO_SHMIOP_Connection_Handler::handle_close (ACE_HANDLE handle,
// Close the handle..
if (this->get_handle () != ACE_INVALID_HANDLE)
{
- // Send the buffered messages first
- this->transport ()->send_buffered_messages ();
-
// Mark the entry as invalid
this->transport ()->mark_invalid ();
@@ -237,28 +217,17 @@ TAO_SHMIOP_Connection_Handler::fetch_handle (void)
return this->get_handle ();
}
-
int
TAO_SHMIOP_Connection_Handler::handle_timeout (const ACE_Time_Value &,
const void *)
{
- // This method is called when buffering timer expires.
- //
- ACE_Time_Value *max_wait_time = 0;
-
- TAO_Stub *stub = 0;
- int has_timeout;
- this->orb_core ()->call_timeout_hook (stub,
- has_timeout,
- *max_wait_time);
-
// Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages (max_wait_time);
+ if (this->transport ()->handle_output () == -1)
+ return -1;
return 0;
}
-
int
TAO_SHMIOP_Connection_Handler::add_transport_to_cache (void)
{
diff --git a/TAO/tao/Strategies/SHMIOP_Transport.cpp b/TAO/tao/Strategies/SHMIOP_Transport.cpp
index 0702b07e05f..148dd75a02e 100644
--- a/TAO/tao/Strategies/SHMIOP_Transport.cpp
+++ b/TAO/tao/Strategies/SHMIOP_Transport.cpp
@@ -1,14 +1,10 @@
// This may look like C, but it's really -*- C++ -*-
// $Id$
-
#include "SHMIOP_Transport.h"
#if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0)
-ACE_RCSID (Strategies, SHMIOP_Transport, "$Id$")
-
-
#include "SHMIOP_Connection_Handler.h"
#include "SHMIOP_Profile.h"
#include "tao/Timeprobe.h"
@@ -27,6 +23,7 @@ ACE_RCSID (Strategies, SHMIOP_Transport, "$Id$")
# include "SHMIOP_Transport.i"
#endif /* ! __ACE_INLINE__ */
+ACE_RCSID (Strategies, SHMIOP_Transport, "$Id$")
TAO_SHMIOP_Transport::TAO_SHMIOP_Transport (TAO_SHMIOP_Connection_Handler *handler,
TAO_ORB_Core *orb_core,
@@ -62,12 +59,23 @@ TAO_SHMIOP_Transport::event_handler_i (void)
}
ssize_t
-TAO_SHMIOP_Transport::send_i (const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time,
- size_t *)
+TAO_SHMIOP_Transport::send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *max_wait_time)
{
- return this->connection_handler_->peer ().send (message_block,
- max_wait_time);
+ bytes_transferred = 0;
+ for (int i = 0; i < iovcnt; ++i)
+ {
+ ssize_t retval =
+ this->connection_handler_->peer ().send (iov[i].iov_base,
+ iov[i].iov_len,
+ max_wait_time);
+ if (retval > 0)
+ bytes_transferred += retval;
+ if (retval <= 0)
+ return retval;
+ }
+ return bytes_transferred;
}
ssize_t
@@ -119,6 +127,21 @@ TAO_SHMIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time,
int
TAO_SHMIOP_Transport::register_handler_i (void)
{
+ if (TAO_debug_level > 4)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d\n",
+ this->id ()));
+ }
+ if (this->connection_handler_->is_registered ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d"
+ ", already registered\n",
+ this->id ()));
+ return 0;
+ }
+
// @@ It seems like this method should go away, the right reactor is
// picked at object creation time.
ACE_Reactor *r = this->orb_core_->reactor ();
@@ -172,7 +195,7 @@ TAO_SHMIOP_Transport::send_message (TAO_OutputCDR &stream,
// versions seem to need it though. Leaving it costs little.
// This guarantees to send all data (bytes) or return an error.
- ssize_t n = this->send_or_buffer (stub,
+ ssize_t n = this->send_message_i (stub,
twoway,
stream.begin (),
max_wait_time);
diff --git a/TAO/tao/Strategies/SHMIOP_Transport.h b/TAO/tao/Strategies/SHMIOP_Transport.h
index 5c6f4e84176..e99ed9d6380 100644
--- a/TAO/tao/Strategies/SHMIOP_Transport.h
+++ b/TAO/tao/Strategies/SHMIOP_Transport.h
@@ -1,5 +1,5 @@
// This may look like C, but it's really -*- C++ -*-
-// $Id$
+
// ===================================================================
/**
* @file SHMIOP_Transport.h
@@ -10,6 +10,7 @@
* @author Modified by Balachandran Natarajan <bala@cs.wustl.edu>
*/
// ===================================================================
+
#ifndef TAO_SHMIOP_TRANSPORT_H
#define TAO_SHMIOP_TRANSPORT_H
#include "ace/pre.h"
@@ -65,9 +66,9 @@ protected:
virtual ACE_Event_Handler *event_handler_i (void);
/// Write the complete Message_Block chain to the connection.
- virtual ssize_t send_i (const ACE_Message_Block *mblk,
- const ACE_Time_Value *s = 0,
- size_t *bytes_transferred = 0);
+ virtual ssize_t send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout = 0);
/// Read len bytes from into buf.
virtual ssize_t recv_i (char *buf,
diff --git a/TAO/tao/Strategies/UIOP_Connection_Handler.cpp b/TAO/tao/Strategies/UIOP_Connection_Handler.cpp
index 378855bbadb..0141c6a0916 100644
--- a/TAO/tao/Strategies/UIOP_Connection_Handler.cpp
+++ b/TAO/tao/Strategies/UIOP_Connection_Handler.cpp
@@ -4,6 +4,8 @@
#if TAO_HAS_UIOP == 1
+#include "UIOP_Transport.h"
+#include "UIOP_Endpoint.h"
#include "tao/debug.h"
#include "tao/ORB_Core.h"
#include "tao/ORB.h"
@@ -11,8 +13,8 @@
#include "tao/Timeprobe.h"
#include "tao/Server_Strategy_Factory.h"
#include "tao/Messaging_Policy_i.h"
-#include "UIOP_Endpoint.h"
#include "tao/Base_Transport_Property.h"
+#include "tao/GIOP_Message_Lite.h"
#if !defined (__ACE_INLINE__)
# include "UIOP_Connection_Handler.inl"
@@ -22,8 +24,6 @@ ACE_RCSID(Strategies, UIOP_Connect, "$Id$")
#include "tao/GIOP_Message_Lite.h"
-
-
TAO_UIOP_Connection_Handler::TAO_UIOP_Connection_Handler (ACE_Thread_Manager *t)
: TAO_UIOP_SVC_HANDLER (t, 0 , 0),
TAO_Connection_Handler (0),
@@ -60,23 +60,8 @@ TAO_UIOP_Connection_Handler::TAO_UIOP_Connection_Handler (TAO_ORB_Core *orb_core
TAO_UIOP_Connection_Handler::~TAO_UIOP_Connection_Handler (void)
{
- if (this->transport () != 0) {
- // If the socket has not already been closed.
- if (this->get_handle () != ACE_INVALID_HANDLE)
- {
- // Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages ();
- }
- else
- {
- // Dequeue messages and delete message blocks.
- this->transport ()->dequeue_all ();
- }
- }
}
-
-
int
TAO_UIOP_Connection_Handler::open (void*)
{
@@ -193,9 +178,6 @@ TAO_UIOP_Connection_Handler::handle_close (ACE_HANDLE handle,
// Close the handle..
if (this->get_handle () != ACE_INVALID_HANDLE)
{
- // Send the buffered messages first
- this->transport ()->send_buffered_messages ();
-
// Mark the entry as invalid
this->transport ()->mark_invalid ();
@@ -224,23 +206,13 @@ int
TAO_UIOP_Connection_Handler::handle_timeout (const ACE_Time_Value &,
const void *)
{
- // This method is called when buffering timer expires.
- //
- ACE_Time_Value *max_wait_time = 0;
-
- TAO_Stub *stub = 0;
- int has_timeout;
- this->orb_core ()->call_timeout_hook (stub,
- has_timeout,
- *max_wait_time);
-
// Cannot deal with errors, and therefore they are ignored.
- this->transport ()->send_buffered_messages (max_wait_time);
+ if (this->transport ()->handle_output () == -1)
+ return -1;
return 0;
}
-
int
TAO_UIOP_Connection_Handler::add_transport_to_cache (void)
{
diff --git a/TAO/tao/Strategies/UIOP_Transport.cpp b/TAO/tao/Strategies/UIOP_Transport.cpp
index 5a438d9f994..c5f7486220e 100644
--- a/TAO/tao/Strategies/UIOP_Transport.cpp
+++ b/TAO/tao/Strategies/UIOP_Transport.cpp
@@ -5,10 +5,6 @@
#if TAO_HAS_UIOP == 1
-
-ACE_RCSID (Strategies, UIOP_Transport, "$Id$")
-
-
#include "UIOP_Connection_Handler.h"
#include "UIOP_Profile.h"
#include "tao/Timeprobe.h"
@@ -26,7 +22,7 @@ ACE_RCSID (Strategies, UIOP_Transport, "$Id$")
# include "UIOP_Transport.i"
#endif /* ! __ACE_INLINE__ */
-
+ACE_RCSID (Strategies, UIOP_Transport, "$Id$")
TAO_UIOP_Transport::TAO_UIOP_Transport (TAO_UIOP_Connection_Handler *handler,
TAO_ORB_Core *orb_core,
@@ -62,14 +58,16 @@ TAO_UIOP_Transport::event_handler_i (void)
}
ssize_t
-TAO_UIOP_Transport::send_i (const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time,
- size_t *bytes_transferred)
+TAO_UIOP_Transport::send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *max_wait_time)
{
- return ACE::send_n (this->connection_handler_->get_handle (),
- message_block,
- max_wait_time,
- bytes_transferred);
+ ssize_t retval = this->connection_handler_->peer ().sendv (iov, iovcnt,
+ max_wait_time);
+ if (retval > 0)
+ bytes_transferred = retval;
+
+ return retval;
}
ssize_t
@@ -120,6 +118,21 @@ TAO_UIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time,
int
TAO_UIOP_Transport::register_handler_i (void)
{
+ if (TAO_debug_level > 4)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d\n",
+ this->id ()));
+ }
+ if (this->connection_handler_->is_registered ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - IIOP_Transport::register_handler %d"
+ ", already registered\n",
+ this->id ()));
+ return 0;
+ }
+
// @@ It seems like this method should go away, the right reactor is
// picked at object creation time.
ACE_Reactor *r = this->orb_core_->reactor ();
@@ -173,7 +186,7 @@ TAO_UIOP_Transport::send_message (TAO_OutputCDR &stream,
// versions seem to need it though. Leaving it costs little.
// This guarantees to send all data (bytes) or return an error.
- ssize_t n = this->send_or_buffer (stub,
+ ssize_t n = this->send_message_i (stub,
twoway,
stream.begin (),
max_wait_time);
diff --git a/TAO/tao/Strategies/UIOP_Transport.h b/TAO/tao/Strategies/UIOP_Transport.h
index b95eeec6e89..b9181e12080 100644
--- a/TAO/tao/Strategies/UIOP_Transport.h
+++ b/TAO/tao/Strategies/UIOP_Transport.h
@@ -1,13 +1,13 @@
// This may look like C, but it's really -*- C++ -*-
-//
+
// ===================================================================
/**
* @file UIOP_Transport.h
*
* $Id$
*
- * @author Originally by Fred Kuhns <fredk@cs.wustl.edu> and Ossama
- * Othman <ossama@ece.uci.edu>
+ * @author Originally by Fred Kuhns <fredk@cs.wustl.edu>
+ * @author Ossama Othman <ossama@ece.uci.edu>
* @author Modified by Balachandran Natarajan <bala@cs.wustl.edu>
*/
// ===================================================================
@@ -70,9 +70,9 @@ protected:
virtual ACE_Event_Handler *event_handler_i (void);
/// Write the complete Message_Block chain to the connection.
- virtual ssize_t send_i (const ACE_Message_Block *mblk,
- const ACE_Time_Value *s = 0,
- size_t *bytes_transferred = 0);
+ virtual ssize_t send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout = 0);
/// Read len bytes from into buf.
virtual ssize_t recv_i (char *buf,
diff --git a/TAO/tao/Sync_Strategies.cpp b/TAO/tao/Sync_Strategies.cpp
index d09bcd1a5a5..b74e06bc096 100644
--- a/TAO/tao/Sync_Strategies.cpp
+++ b/TAO/tao/Sync_Strategies.cpp
@@ -10,133 +10,53 @@
# include "tao/Sync_Strategies.i"
#endif /* ! __ACE_INLINE__ */
-TAO_Sync_Strategy::~TAO_Sync_Strategy (void)
-{
-}
+ACE_RCSID(tao, Sync_Strategies, "$Id$")
-ssize_t
-TAO_Transport_Sync_Strategy::send (TAO_Transport &transport,
- TAO_Stub &,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time)
+TAO_Sync_Strategy::~TAO_Sync_Strategy (void)
{
- // Immediate delegation to the transport.
- return transport.send (message_block,
- max_wait_time);
}
-#if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
+// ****************************************************************
-ssize_t
-TAO_Delayed_Buffering_Sync_Strategy::send (TAO_Transport &transport,
- TAO_Stub &stub,
- const ACE_Message_Block *mb,
- const ACE_Time_Value *max_wait_time)
+int
+TAO_Transport_Sync_Strategy::
+ must_queue (int)
{
- ACE_Message_Block *message_block =
- ACE_const_cast (ACE_Message_Block *, mb);
-
- ssize_t result = 0;
-
- // Get the message queue from the transport.
- TAO_Transport_Buffering_Queue &buffering_queue =
- transport.buffering_queue ();
-
- // Check if there are messages already in the queue.
- if (!buffering_queue.is_empty ())
- return TAO_Eager_Buffering_Sync_Strategy::send (transport,
- stub,
- message_block,
- max_wait_time);
-
- //
- // Otherwise there were no queued messages. We first try to send
- // the message right away.
- //
-
- // Actual network send.
- size_t bytes_transferred = 0;
- result = transport.send (message_block,
- max_wait_time,
- &bytes_transferred);
-
- // Cannot send completely: timed out.
- if (result == -1 &&
- errno == ETIME)
- {
- if (bytes_transferred > 0)
- {
- // If successful in sending some of the data, reset the
- // message block appropriately.
- transport.reset_sent_message (message_block,
- bytes_transferred);
- }
-
- // Queue the rest.
- return bytes_transferred +
- TAO_Eager_Buffering_Sync_Strategy::send (transport,
- stub,
- message_block,
- max_wait_time);
- }
-
- // EOF or other errors.
- if (result == -1 ||
- result == 0)
- return -1;
-
- // Everything was successfully delivered.
- return result;
+ return 0;
}
-ssize_t
-TAO_Eager_Buffering_Sync_Strategy::send (TAO_Transport &transport,
- TAO_Stub &stub,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time)
+int
+TAO_Transport_Sync_Strategy::
+ buffering_constraints_reached (TAO_Stub *,
+ size_t ,
+ size_t ,
+ int &,
+ ACE_Time_Value &)
{
- ssize_t result = 0;
-
- // Get the message queue from the transport.
- TAO_Transport_Buffering_Queue &buffering_queue =
- transport.buffering_queue ();
-
- // Copy the message.
- ACE_Message_Block *copy = message_block->clone ();
-
- // Enqueue current message.
- result = buffering_queue.enqueue_tail (copy);
-
- // Enqueuing error.
- if (result == -1)
- {
- // Eliminate the copy.
- copy->release ();
+ return 0;
+}
- // Return error.
- return -1;
- }
+#if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
- // Check if upper bound has been reached.
- if (this->buffering_constraints_reached (transport,
- stub,
- buffering_queue))
- {
- return transport.send_buffered_messages (max_wait_time);
- }
+// ****************************************************************
- // Hoping that this return value is meaningful or at least
- // acceptable.
- return message_block->total_length ();
+int
+TAO_Eager_Buffering_Sync_Strategy::
+ must_queue (int)
+{
+ return 1;
}
int
-TAO_Eager_Buffering_Sync_Strategy::buffering_constraints_reached (TAO_Transport &transport,
- TAO_Stub &stub,
- TAO_Transport_Buffering_Queue &buffering_queue)
+TAO_Eager_Buffering_Sync_Strategy::
+ buffering_constraints_reached (TAO_Stub *stub,
+ size_t msg_count,
+ size_t total_bytes,
+ int &set_timer,
+ ACE_Time_Value &interval)
{
TAO_Buffering_Constraint_Policy *buffering_constraint_policy =
- stub.buffering_constraint ();
+ stub->buffering_constraint ();
if (buffering_constraint_policy == 0)
return 1;
@@ -147,80 +67,53 @@ TAO_Eager_Buffering_Sync_Strategy::buffering_constraints_reached (TAO_Transport
TAO::BufferingConstraint buffering_constraint;
buffering_constraint_policy->get_buffering_constraint (buffering_constraint);
- this->timer_check (transport,
- buffering_constraint);
+ this->timer_check (buffering_constraint, set_timer, interval);
if (buffering_constraint.mode == TAO::BUFFER_FLUSH)
return 1;
if (ACE_BIT_ENABLED (buffering_constraint.mode,
- TAO::BUFFER_MESSAGE_COUNT) &&
- buffering_queue.message_count () >= buffering_constraint.message_count)
+ TAO::BUFFER_MESSAGE_COUNT)
+ && msg_count >= buffering_constraint.message_count)
return 1;
if (ACE_BIT_ENABLED (buffering_constraint.mode,
- TAO::BUFFER_MESSAGE_BYTES) &&
- buffering_queue.message_length () >= buffering_constraint.message_bytes)
+ TAO::BUFFER_MESSAGE_BYTES)
+ && total_bytes >= buffering_constraint.message_bytes)
return 1;
return 0;
}
void
-TAO_Eager_Buffering_Sync_Strategy::timer_check (TAO_Transport &transport,
- const TAO::BufferingConstraint &buffering_constraint)
+TAO_Eager_Buffering_Sync_Strategy::
+ timer_check (const TAO::BufferingConstraint &buffering_constraint,
+ int &set_timer,
+ ACE_Time_Value &interval)
{
- if (transport.buffering_timer_id () != 0)
+ if (!ACE_BIT_ENABLED (buffering_constraint.mode,
+ TAO::BUFFER_TIMEOUT))
{
- //
- // There is a timeout set by us, though we are not sure if we
- // still need the timeout or if the timeout value is correct or
- // not.
- //
-
- // Get our reactor.
- ACE_Reactor *reactor = transport.orb_core ()->reactor ();
-
- if (!ACE_BIT_ENABLED (buffering_constraint.mode,
- TAO::BUFFER_TIMEOUT))
- {
- // Timeouts are no longer needed. Cancel existing one.
- reactor->cancel_timer (transport.buffering_timer_id ());
- transport.buffering_timer_id (0);
- }
- else
- {
- ACE_Time_Value timeout =
- this->time_conversion (buffering_constraint.timeout);
-
- if (transport.buffering_timeout_value () == timeout)
- {
- // Timeout value is the same, nothing to be done.
- }
- else
- {
- // Timeout value has changed, reset the old timer.
- reactor->reset_timer_interval (transport.buffering_timer_id (),
- timeout);
- }
- }
+ set_timer = 0;
+ return;
}
- else if (ACE_BIT_ENABLED (buffering_constraint.mode,
- TAO::BUFFER_TIMEOUT))
- {
- // We didn't have timeouts before, but we want them now.
- ACE_Time_Value timeout =
- this->time_conversion (buffering_constraint.timeout);
- long timer_id = transport.register_for_timer_event (0, timeout, timeout);
+ ACE_Time_Value timeout =
+ this->time_conversion (buffering_constraint.timeout);
- transport.buffering_timer_id (timer_id);
- transport.buffering_timeout_value (timeout);
+ if (interval == timeout)
+ {
+ set_timer = 0;
+ return;
}
+
+ set_timer = 1;
+ interval = timeout;
}
ACE_Time_Value
-TAO_Eager_Buffering_Sync_Strategy::time_conversion (const TimeBase::TimeT &time)
+TAO_Eager_Buffering_Sync_Strategy::
+ time_conversion (const TimeBase::TimeT &time)
{
TimeBase::TimeT seconds = time / 10000000u;
TimeBase::TimeT microseconds = (time % 10000000u) / 10;
@@ -228,4 +121,14 @@ TAO_Eager_Buffering_Sync_Strategy::time_conversion (const TimeBase::TimeT &time)
ACE_U64_TO_U32 (microseconds));
}
+// ****************************************************************
+
+int
+TAO_Delayed_Buffering_Sync_Strategy::
+ must_queue (int queue_empty)
+{
+ // If the queue is empty we want to send immediately
+ return !queue_empty;
+}
+
#endif /* TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1 */
diff --git a/TAO/tao/Sync_Strategies.h b/TAO/tao/Sync_Strategies.h
index 5b273dac3e5..b5f2ae4b2ee 100644
--- a/TAO/tao/Sync_Strategies.h
+++ b/TAO/tao/Sync_Strategies.h
@@ -27,24 +27,57 @@
#include "tao/Transport.h"
#include "tao/TAOC.h"
+/// Define the interface for the Queueing Strategy
+/**
+ * The low-level I/O components in the ORB use this strategy to
+ * determine when messages must be queued, immediately sent or
+ * flushed.
+ *
+ * The strategy isolates this low-level components from the higher
+ * level strategies used by the application developer.
+ *
+ * @todo The class name (Sync_Strategy) is inherited from the policies
+ * (SyncScopePolicy), but Queueing_Strategy probably captures its
+ * intent better. It should be changed in a future revision of the
+ * ORB.
+ */
class TAO_Export TAO_Sync_Strategy
{
public:
+ /// Destructor
virtual ~TAO_Sync_Strategy (void);
- virtual ssize_t send (TAO_Transport &transport,
- TAO_Stub &stub,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time) = 0;
+ /// Return 1 if a message must be queued
+ virtual int must_queue (int queue_empty) = 0;
+
+ /// Return 1 if it is time to start
+ /**
+ * @param stub The object used to make the request, this is used to
+ * obtain the policies currently in effect for the request
+ * @param msg_count The number of messages currently queued
+ * @param total_bytes Number of bytes currently queued
+ * @param set_timer Returns 1 if a timer should be set to drain the
+ * queue
+ * @param interval If set_timer returns 1, this parameter contains
+ * the timer interval
+ */
+ virtual int buffering_constraints_reached (TAO_Stub *stub,
+ size_t msg_count,
+ size_t total_bytes,
+ int &set_timer,
+ ACE_Time_Value &interval) = 0;
};
class TAO_Export TAO_Transport_Sync_Strategy : public TAO_Sync_Strategy
{
public:
- ssize_t send (TAO_Transport &transport,
- TAO_Stub &stub,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time);
+ virtual int must_queue (int queue_empty);
+
+ virtual int buffering_constraints_reached (TAO_Stub *stub,
+ size_t msg_count,
+ size_t total_bytes,
+ int &set_timer,
+ ACE_Time_Value &interval);
};
#if (TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1)
@@ -52,28 +85,39 @@ public:
class TAO_Export TAO_Eager_Buffering_Sync_Strategy : public TAO_Sync_Strategy
{
public:
- ssize_t send (TAO_Transport &transport,
- TAO_Stub &stub,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time);
-
- virtual int buffering_constraints_reached (TAO_Transport &transport,
- TAO_Stub &stub,
- TAO_Transport_Buffering_Queue &buffering_queue);
-
- void timer_check (TAO_Transport &transport,
- const TAO::BufferingConstraint &buffering_constraint);
-
+ virtual int must_queue (int queue_empty);
+
+ virtual int buffering_constraints_reached (TAO_Stub *stub,
+ size_t msg_count,
+ size_t total_bytes,
+ int &set_timer,
+ ACE_Time_Value &interval);
+
+private:
+ /// Check if the buffering constraint includes any timeouts and
+ /// compute the right timeout interval if needed.
+ /**
+ * @param buffering_constraint The constraints defined by the
+ * application
+ * @param set_timer Return 1 if the timer should be set
+ * @param interval Return the timer interval value
+ */
+ void timer_check (const TAO::BufferingConstraint &buffering_constraint,
+ int &set_timer,
+ ACE_Time_Value &interval);
+
+ /// Convert from standard CORBA time units to seconds/microseconds.
ACE_Time_Value time_conversion (const TimeBase::TimeT &time);
};
+/// Delay the buffering decision until the transport blocks
+/**
+ * If the queue is empty the transport will try to send immediately.
+ */
class TAO_Export TAO_Delayed_Buffering_Sync_Strategy : public TAO_Eager_Buffering_Sync_Strategy
{
public:
- ssize_t send (TAO_Transport &transport,
- TAO_Stub &stub,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time);
+ virtual int must_queue (int queue_empty);
};
#endif /* TAO_HAS_BUFFERING_CONSTRAINT_POLICY == 1 */
diff --git a/TAO/tao/TAO.dsp b/TAO/tao/TAO.dsp
index b8e62d48e3f..ff600e2e15e 100644
--- a/TAO/tao/TAO.dsp
+++ b/TAO/tao/TAO.dsp
@@ -219,6 +219,10 @@ SOURCE=.\Bind_Dispatcher_Guard.cpp
# End Source File
# Begin Source File
+SOURCE=.\Block_Flushing_Strategy.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\BoundsC.cpp
# End Source File
# Begin Source File
@@ -379,6 +383,10 @@ SOURCE=.\FILE_Parser.cpp
# End Source File
# Begin Source File
+SOURCE=.\Flushing_Strategy.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\GIOP_Message_Base.cpp
# End Source File
# Begin Source File
@@ -515,6 +523,10 @@ SOURCE=.\Marshal.cpp
# End Source File
# Begin Source File
+SOURCE=.\Message_Sent_Callback.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Messaging_ORBInitializer.cpp
# End Source File
# Begin Source File
@@ -675,6 +687,14 @@ SOURCE=.\Protocols_Hooks.cpp
# End Source File
# Begin Source File
+SOURCE=.\Queued_Message.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Reactive_Flushing_Strategy.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor_Registry.cpp
# End Source File
# Begin Source File
@@ -935,6 +955,10 @@ SOURCE=.\Bind_Dispatcher_Guard.h
# End Source File
# Begin Source File
+SOURCE=.\Block_Flushing_Strategy.h
+# End Source File
+# Begin Source File
+
SOURCE=.\BoundsC.h
# End Source File
# Begin Source File
@@ -1107,6 +1131,10 @@ SOURCE=.\FILE_Parser.h
# End Source File
# Begin Source File
+SOURCE=.\Flushing_Strategy.h
+# End Source File
+# Begin Source File
+
SOURCE=.\giop.h
# End Source File
# Begin Source File
@@ -1263,6 +1291,14 @@ SOURCE=.\marshal.h
# End Source File
# Begin Source File
+SOURCE=.\Message_Sent_Callback.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Message_Sent_Callback.inl
+# End Source File
+# Begin Source File
+
SOURCE=.\Messaging_ORBInitializer.h
# End Source File
# Begin Source File
@@ -1443,6 +1479,18 @@ SOURCE=.\Protocols_Hooks.h
# End Source File
# Begin Source File
+SOURCE=.\Queued_Message.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Queued_Message.inl
+# End Source File
+# Begin Source File
+
+SOURCE=.\Reactive_Flushing_Strategy.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor_Registry.h
# End Source File
# Begin Source File
diff --git a/TAO/tao/TAO_Static.dsp b/TAO/tao/TAO_Static.dsp
index ec3f8b8cd25..800b8052230 100644
--- a/TAO/tao/TAO_Static.dsp
+++ b/TAO/tao/TAO_Static.dsp
@@ -151,6 +151,10 @@ SOURCE=.\Bind_Dispatcher_Guard.h
# End Source File
# Begin Source File
+SOURCE=.\Block_Flushing_Strategy.h
+# End Source File
+# Begin Source File
+
SOURCE=.\BoundsC.h
# End Source File
# Begin Source File
@@ -307,6 +311,10 @@ SOURCE=.\FILE_Parser.h
# End Source File
# Begin Source File
+SOURCE=.\Flushing_Strategy.h
+# End Source File
+# Begin Source File
+
SOURCE=.\giop.h
# End Source File
# Begin Source File
@@ -459,6 +467,10 @@ SOURCE=.\marshal.h
# End Source File
# Begin Source File
+SOURCE=.\Message_Sent_Callback.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Messaging_ORBInitializer.h
# End Source File
# Begin Source File
@@ -639,6 +651,14 @@ SOURCE=.\Protocols_Hooks.h
# End Source File
# Begin Source File
+SOURCE=.\Queued_Message.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Reactive_Flushing_Strategy.h
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor_Registry.h
# End Source File
# Begin Source File
@@ -1171,6 +1191,10 @@ SOURCE=.\marshal.i
# End Source File
# Begin Source File
+SOURCE=.\Message_Sent_Callback.inl
+# End Source File
+# Begin Source File
+
SOURCE=.\Messaging_Policy_i.i
# End Source File
# Begin Source File
@@ -1307,6 +1331,10 @@ SOURCE=.\Profile.i
# End Source File
# Begin Source File
+SOURCE=.\Queued_Message.inl
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor_Registry.i
# End Source File
# Begin Source File
@@ -1547,6 +1575,10 @@ SOURCE=.\Bind_Dispatcher_Guard.cpp
# End Source File
# Begin Source File
+SOURCE=.\Block_Flushing_Strategy.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\BoundsC.cpp
# End Source File
# Begin Source File
@@ -1695,6 +1727,10 @@ SOURCE=.\FILE_Parser.cpp
# End Source File
# Begin Source File
+SOURCE=.\Flushing_Strategy.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\GIOP_Message_Base.cpp
# End Source File
# Begin Source File
@@ -1831,6 +1867,10 @@ SOURCE=.\Marshal.cpp
# End Source File
# Begin Source File
+SOURCE=.\Message_Sent_Callback.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Messaging_ORBInitializer.cpp
# End Source File
# Begin Source File
@@ -1991,6 +2031,14 @@ SOURCE=.\Protocols_Hooks.cpp
# End Source File
# Begin Source File
+SOURCE=.\Queued_Message.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Reactive_Flushing_Strategy.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\Reactor_Registry.cpp
# End Source File
# Begin Source File
diff --git a/TAO/tao/Transport.cpp b/TAO/tao/Transport.cpp
index 325b65e3945..730cc32fad5 100644
--- a/TAO/tao/Transport.cpp
+++ b/TAO/tao/Transport.cpp
@@ -11,6 +11,11 @@
#include "Stub.h"
#include "Sync_Strategies.h"
#include "Connection_Handler.h"
+#include "Queued_Message.h"
+#include "Flushing_Strategy.h"
+#include "debug.h"
+
+#include "ace/Message_Block.h"
#if !defined (__ACE_INLINE__)
# include "Transport.inl"
@@ -54,9 +59,9 @@ TAO_Transport::TAO_Transport (CORBA::ULong tag,
, tag_ (tag)
, orb_core_ (orb_core)
, cache_map_entry_ (0)
- , buffering_queue_ (0)
- , buffering_timer_id_ (0)
, bidirectional_flag_ (-1)
+ , head_ (0)
+ , tail_ (0)
, id_ ((long) this)
{
TAO_Client_Strategy_Factory *cf =
@@ -81,29 +86,65 @@ TAO_Transport::~TAO_Transport (void)
delete this->tms_;
this->tms_ = 0;
- delete this->buffering_queue_;
+ TAO_Queued_Message *i = this->head_;
+ while (i != 0)
+ {
+ // @@ This is a good point to insert a flag to indicate that a
+ // CloseConnection message was successfully received.
+ i->connection_closed ();
+
+ TAO_Queued_Message *tmp = i;
+ i = i->next ();
+
+ tmp->destroy ();
+ }
delete this->handler_lock_;
}
-ssize_t
-TAO_Transport::send_or_buffer (TAO_Stub *stub,
- int two_way,
- const ACE_Message_Block *message_block,
- const ACE_Time_Value *max_wait_time)
+int
+TAO_Transport::handle_output ()
{
-
- if (stub == 0 || two_way)
+ if (TAO_debug_level > 4)
{
- return this->send (message_block, max_wait_time);
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::handle_output\n",
+ this->id ()));
}
- TAO_Sync_Strategy &sync_strategy = stub->sync_strategy ();
+ int retval;
+ do
+ {
+ // The reactor is asking us to send more data, first check if
+ // there is a current message that needs more sending:
+ retval = this->send_current_message ();
+
+ if (TAO_debug_level > 4)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::handle_output, "
+ "send_current_message returns %d/%d\n",
+ this->id (),
+ retval, errno));
+ }
- return sync_strategy.send (*this,
- *stub,
- message_block,
- max_wait_time);
+ if (retval == 1)
+ {
+ // ... there is no current message or it was completely
+ // sent, time to check the queue....
+ // ... no more messages in the queue, cancel output...
+ TAO_Flushing_Strategy *flushing_strategy =
+ this->orb_core ()->flushing_strategy ();
+
+ flushing_strategy->cancel_output (this);
+ return 0;
+ }
+ // ... on Win32 we must continue until we get EWOULDBLOCK ...
+ }
+ while (retval > 0);
+
+ // Any errors are returned directly to the Reactor
+ return retval;
}
void
@@ -118,6 +159,7 @@ TAO_Transport::provide_handle (ACE_Handle_Set &handle_set)
handle_set.set_bit (eh->get_handle ());
}
+#if 0
ssize_t
TAO_Transport::send_buffered_messages (const ACE_Time_Value *max_wait_time)
{
@@ -195,73 +237,376 @@ TAO_Transport::reset_sent_message (ACE_Message_Block *message_block,
bytes_delivered,
0);
}
+#endif /* 0 */
-void
-TAO_Transport::reset_queued_message (ACE_Message_Block *message_block,
- size_t bytes_delivered)
+static void
+dump_iov (iovec *iov, int iovcnt, int id, size_t current_transfer)
{
- this->reset_message (message_block,
- bytes_delivered,
- 1);
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_block_chain"
+ " sending %d buffers\n",
+ id, iovcnt));
+ for (int i = 0; i != iovcnt && 0 < current_transfer; ++i)
+ {
+ size_t iov_len = iov[i].iov_len;
+
+ // Possibly a partially sent iovec entry.
+ if (current_transfer < iov_len)
+ iov_len = current_transfer;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_block_chain"
+ " buffer %d/%d has %d bytes\n",
+ id,
+ i, iovcnt,
+ iov_len));
+ size_t len;
+ for (size_t offset = 0; offset < iov_len; offset += len)
+ {
+ len = iov_len - offset;
+ if (len > 512)
+ len = 512;
+ ACE_HEX_DUMP ((LM_DEBUG,
+ ACE_static_cast(char*,iov[i].iov_base) + offset,
+ len,
+ "TAO (%P|%t) - Transport::send_message_block_chain "));
+ }
+ current_transfer -= iov_len;
+ }
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_mesage_block_chain"
+ " end of data\n",
+ id));
}
-void
-TAO_Transport::reset_message (ACE_Message_Block *message_block,
- size_t bytes_delivered,
- int queued_message)
+int
+TAO_Transport::send_message_block_chain (const ACE_Message_Block *message_block,
+ size_t &bytes_transferred,
+ ACE_Time_Value *timeout)
{
- while (bytes_delivered != 0)
+ bytes_transferred = 0;
+
+ iovec iov[IOV_MAX];
+ int iovcnt = 0;
+
+ while (message_block != 0)
{
- // Our current message block chain.
- ACE_Message_Block *current_message_block = message_block;
+ size_t message_block_length =
+ message_block->length ();
- int completely_delivered_current_message_block_chain = 0;
+ // Check if this block has any data to be sent.
+ if (message_block_length > 0)
+ {
+ // Collect the data in the iovec.
+ iov[iovcnt].iov_base = message_block->rd_ptr ();
+ iov[iovcnt].iov_len = message_block_length;
+
+ // Increment iovec counter.
+ 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
+ // as 16.
+ if (iovcnt == IOV_MAX)
+ {
+ size_t current_transfer = 0;
+
+ ssize_t result =
+ this->send (iov, iovcnt, current_transfer, timeout);
+
+ if (TAO_debug_level > 6)
+ {
+ dump_iov (iov, iovcnt, this->id (), current_transfer);
+ }
+
+ // Add to total bytes transferred.
+ bytes_transferred += current_transfer;
+
+ // Errors.
+ if (result == -1 || result == 0)
+ return result;
+
+ // Reset iovec counter.
+ iovcnt = 0;
+ }
+ }
+
+ // Select the next message block in the chain.
+ message_block = message_block->cont ();
+ }
- while (current_message_block != 0 &&
- bytes_delivered != 0)
+ // Check for remaining buffers to be sent. This will happen when
+ // IOV_MAX is not a multiple of the number of message blocks.
+ if (iovcnt != 0)
+ {
+ size_t current_transfer = 0;
+
+ ssize_t result =
+ this->send (iov, iovcnt, current_transfer, timeout);
+
+ if (TAO_debug_level > 6)
{
- size_t current_message_block_length =
- current_message_block->length ();
+ dump_iov (iov, iovcnt, this->id (), current_transfer);
+ }
- int completely_delivered_current_message_block =
- bytes_delivered >= current_message_block_length;
+ // Add to total bytes transferred.
+ bytes_transferred += current_transfer;
- size_t adjustment_size =
- ACE_MIN (current_message_block_length, bytes_delivered);
+ // Errors.
+ if (result == -1 || result == 0)
+ return result;
+ }
- // Reset according to send size.
- current_message_block->rd_ptr (adjustment_size);
+ // Return total bytes transferred.
+ return bytes_transferred;
+}
- // If queued message, adjust the queue.
- if (queued_message)
- // Hand adjust <message_length>.
- this->buffering_queue_->message_length (
- this->buffering_queue_->message_length () - adjustment_size);
+int
+TAO_Transport::send_current_message (void)
+{
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->queue_mutex_, -1);
- // Adjust <bytes_delivered>.
- bytes_delivered -= adjustment_size;
+ if (this->head_ == 0)
+ return 1;
- if (completely_delivered_current_message_block)
- {
- // Next message block in the continuation chain.
- current_message_block = current_message_block->cont ();
+ size_t bytes_transferred;
+
+ ssize_t retval =
+ this->send_message_block_chain (this->head_->mb (),
+ bytes_transferred);
+ if (retval == 0)
+ {
+ // The connection was closed, return -1 to have the Reactor
+ // close this transport and event handler
+ return -1;
+ }
+
+ // Because there can be a partial transfer we need to adjust the
+ // number of bytes sent.
+ this->head_->bytes_transferred (bytes_transferred);
+ if (this->head_->done ())
+ {
+ // Remove the current message....
+ TAO_Queued_Message *head = this->head_;
+ head->remove_from_list (this->head_, this->tail_);
+
+ head->destroy ();
+ }
+
+ if (retval == -1)
+ {
+ // ... timeouts and flow control are not real errors, the
+ // connection is still valid and we must continue sending the
+ // current message ...
+ if (errno == EWOULDBLOCK || errno == ETIME)
+ return 0;
+
+ return -1;
+ }
+
+ if (this->head_ == 0)
+ return 1;
+ return 0;
+}
+
+int
+TAO_Transport::send_message_i (TAO_Stub *stub,
+ int twoway_flag,
+ const ACE_Message_Block *message_block,
+ ACE_Time_Value *max_wait_time)
+{
+ TAO_Flushing_Strategy *flushing_strategy =
+ this->orb_core ()->flushing_strategy ();
+
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->queue_mutex_, -1);
+
+ int queue_empty = (this->head_ == 0);
+
+ // Let's figure out if the message should be queued without trying
+ // to send first:
+ int must_queue = 0;
+ if (this->head_ != 0)
+ must_queue = 1;
+ else if (!twoway_flag
+ && stub->sync_strategy ().must_queue (queue_empty))
+ {
+ must_queue = 1;
+ }
+
+ TAO_Queued_Message *queued_message = 0;
+ if (must_queue)
+ {
+ // ... simply queue the message ...
+
+ if (TAO_debug_level > 6)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_i, "
+ "message is queued\n",
+ this->id ()));
+ }
+
+ queued_message =
+ this->copy_message_block (message_block);
+
+ queued_message->push_back (this->head_, this->tail_);
+ }
+ else
+ {
+ // ... in this case we must try to send the message first ...
+
+ if (TAO_debug_level > 6)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_i, "
+ "trying to send the message\n",
+ this->id ()));
+ }
- if (current_message_block == 0)
- completely_delivered_current_message_block_chain = 1;
+ size_t byte_count;
+
+ // @@ I don't think we want to hold the mutex here, however if
+ // we release it we need to recheck the status of the transport
+ // after we return... once I understand the final form for this
+ // code I will re-visit this decision
+ ssize_t n = this->send_message_block_chain (message_block,
+ byte_count,
+ max_wait_time);
+ if (n == 0)
+ return -1; // EOF
+ else if (n == -1)
+ {
+ // ... if this is just an EWOULDBLOCK we must schedule the
+ // message for later ...
+ if (errno != EWOULDBLOCK)
+ {
+ return -1;
}
}
- if (completely_delivered_current_message_block_chain)
+ // ... let's figure out if the complete message was sent ...
+ if (message_block->total_length () == byte_count)
+ {
+ // Done, just return. Notice that there are no allocations
+ // or copies up to this point (though some fancy calling
+ // back and forth).
+ // This is the common case for the critical path, it should
+ // be fast.
+ return 0;
+ }
+
+ // ... the message was only partially sent, schedule reactive
+ // output...
+ flushing_strategy->schedule_output (this);
+
+ // ... and set it as the current message ...
+ if (twoway_flag)
+ {
+ // ... we are going to block, so there is no need to clone
+ // the message block...
+ // @@ It seems wasteful to allocate a TAO_Queued_Message in
+ // this case, but it is simpler to do it this way.
+ ACE_NEW_RETURN (queued_message,
+ TAO_Queued_Message (
+ ACE_const_cast(ACE_Message_Block*,message_block),
+ 0),
+ -1);
+ }
+ else
+ {
+ queued_message =
+ this->copy_message_block (message_block);
+ if (queued_message == 0)
+ return -1;
+ }
+
+ if (TAO_debug_level > 6)
{
- // Go to the next message block chain.
- message_block = message_block->next ();
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_i, "
+ " queued anyway, %d bytes sent\n",
+ this->id (),
+ byte_count));
+
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_i, "
+ " queued message contains %d bytes, %d transferred\n",
+ this->id (),
+ queued_message->mb ()->total_length (),
+ byte_count));
+ }
+
+ queued_message->bytes_transferred (byte_count);
+
+ if (TAO_debug_level > 6)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::send_message_i, "
+ " queued message still has %d bytes to go\n",
+ this->id (),
+ queued_message->mb ()->total_length ()));
+ }
+
+ // ... insert at the head of the queue, we can use push_back()
+ // because the queue is empty ...
+ queued_message->push_back (this->head_, this->tail_);
+ }
+
+ // ... two choices, this is a twoway request or not, if it is
+ // then we must only return once the complete message has been
+ // sent:
+
+ if (twoway_flag)
+ {
+ // Release the mutex, other threads may modify the queue as we
+ // block for a long time writing out data.
+ ace_mon.release ();
+ int result = flushing_strategy->flush_message (this, queued_message);
+ queued_message->destroy ();
+ return result;
+ }
+
+ // ... this is not a twoway. We must check if the buffering
+ // constraints have been reached, if so, then we should start
+ // flushing out data....
- // If queued message, adjust the queue.
- if (queued_message)
- // Release this <current_message_block>.
- this->dequeue_head ();
+ // First let's compute the size of the queue:
+ size_t msg_count = 0;
+ size_t total_bytes = 0;
+ for (TAO_Queued_Message *i = this->head_; i != 0; i = i->next ())
+ {
+ msg_count++;
+ total_bytes += i->mb ()->total_length ();
+ }
+
+ int set_timer;
+ ACE_Time_Value interval;
+
+ if (stub->sync_strategy ().buffering_constraints_reached (stub,
+ msg_count,
+ total_bytes,
+ set_timer,
+ interval))
+ {
+ ace_mon.release ();
+ // @@ memory management of the queued messages is getting tricky.
+ int result = flushing_strategy->flush_message (this,
+ this->tail_);
+ return result;
+ }
+ else
+ {
+ // ... it is not time to flush yet, but maybe we need to set a
+ // timer ...
+ if (set_timer)
+ {
+ // @@ We need to schedule the timer. We should also be
+ // careful not to schedule one if there is one scheduled
+ // already.
}
}
+ return 0;
}
int
@@ -314,14 +659,6 @@ TAO_Transport::connection_handler_closing (void)
TAO_Transport::release(this);
}
-#if 0
-TAO_Connection_Handler*
-TAO_Transport::connection_handler (void) const
-{
- return 0;
-}
-#endif
-
TAO_Transport*
TAO_Transport::_duplicate (TAO_Transport* transport)
{
@@ -400,10 +737,30 @@ TAO_Transport::close_connection (void)
this->orb_core_->transport_cache ().purge_entry (this->cache_map_entry_);
}
+TAO_Queued_Message *
+TAO_Transport::copy_message_block (const ACE_Message_Block *message_block)
+{
+ size_t length = message_block->total_length ();
+
+ // @@ Use Auto_Ptr<> to cleanup the message block, should the second
+ // allocation fail
+ ACE_Message_Block *copy;
+ ACE_NEW_RETURN (copy, ACE_Message_Block (length), 0);
+ for (const ACE_Message_Block *i = message_block;
+ i != 0;
+ i = i->cont ())
+ copy->copy (i->rd_ptr (), i->length ());
+
+ TAO_Queued_Message *msg;
+ ACE_NEW_RETURN (msg, TAO_Queued_Message (copy, 1), 0);
+
+ return msg;
+}
+
ssize_t
-TAO_Transport::send (const ACE_Message_Block *mblk,
- const ACE_Time_Value *timeout,
- size_t *bytes_transferred)
+TAO_Transport::send (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout)
{
ACE_MT (ACE_GUARD_RETURN (ACE_Lock,
guard,
@@ -423,7 +780,7 @@ TAO_Transport::send (const ACE_Message_Block *mblk,
}
// now call the template method
- return this->send_i (mblk, timeout, bytes_transferred);
+ return this->send_i (iov, iovcnt, bytes_transferred, timeout);
}
ssize_t
@@ -491,3 +848,55 @@ TAO_Transport::id (int id)
{
this->id_ = id;
}
+
+int
+TAO_Transport::schedule_output (void)
+{
+ ACE_MT (ACE_GUARD_RETURN (ACE_Lock,
+ guard,
+ *this->handler_lock_,
+ -1));
+
+ ACE_Event_Handler *eh = this->event_handler_i ();
+ if (eh == 0)
+ return -1;
+
+ ACE_Reactor *reactor = eh->reactor ();
+ if (reactor == 0)
+ return -1;
+
+ if (TAO_debug_level > 3)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::schedule_output\n",
+ this->id ()));
+ }
+
+ return reactor->schedule_wakeup (eh, ACE_Event_Handler::WRITE_MASK);
+}
+
+int
+TAO_Transport::cancel_output (void)
+{
+ ACE_MT (ACE_GUARD_RETURN (ACE_Lock,
+ guard,
+ *this->handler_lock_,
+ -1));
+
+ ACE_Event_Handler *eh = this->event_handler_i ();
+ if (eh == 0)
+ return -1;
+
+ ACE_Reactor *reactor = eh->reactor ();
+ if (reactor == 0)
+ return -1;
+
+ if (TAO_debug_level > 3)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO (%P|%t) - Transport[%d]::cancel output\n",
+ this->id ()));
+ }
+
+ return reactor->cancel_wakeup (eh, ACE_Event_Handler::WRITE_MASK);
+}
diff --git a/TAO/tao/Transport.h b/TAO/tao/Transport.h
index 4feb9dccaed..f51102285cc 100644
--- a/TAO/tao/Transport.h
+++ b/TAO/tao/Transport.h
@@ -9,7 +9,6 @@
* Define the interface for the Transport component in TAO's
* pluggable protocol framework.
*
- *
* @author Fred Kuhns <fredk@cs.wustl.edu>
*/
//=============================================================================
@@ -23,6 +22,7 @@
#include "Exception.h"
#include "Transport_Descriptor_Interface.h"
#include "Transport_Cache_Manager.h"
+#include "ace/Strategies.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -35,10 +35,7 @@ class TAO_Transport_Mux_Strategy;
class TAO_Wait_Strategy;
class TAO_Connection_Handler;
-#include "ace/Message_Queue.h"
-#include "ace/Strategies.h"
-
-typedef ACE_Message_Queue<ACE_NULL_SYNCH> TAO_Transport_Buffering_Queue;
+class TAO_Queued_Message;
class TAO_Export TAO_Synch_Refcountable : private ACE_Refcountable
{
@@ -56,7 +53,6 @@ protected:
TAO_SYNCH_MUTEX mutex_;
};
-
/**
* @class TAO_Transport
*
@@ -94,10 +90,10 @@ protected:
* transport may already be sending another message in a reactive
* fashion.
*
- * Consequently, the Transport must also keep a
- * <TT>current_message</TT>, if the current message is not null any
- * new messages must be queued. Only once the current message is
- * completely sent we can take a message out of the queue.
+ * Consequently, the Transport must also know if the head of the queue
+ * has been partially sent. In that case new messages can only follow
+ * the head. Only once the head is completely sent we can start
+ * sending new messages.
*
* <H4>Waiting threads:</H4> One or more threads can be blocked
* waiting for the connection to completely send the message.
@@ -145,11 +141,6 @@ protected:
*/
class TAO_Export TAO_Transport : private TAO_Synch_Refcountable
{
-
- friend class TAO_Transport_Sync_Strategy;
- friend class TAO_Eager_Buffering_Sync_Strategy;
- friend class TAO_Delayed_Buffering_Sync_Strategy;
-
public:
/// default creator, requres the tag value be supplied.
TAO_Transport (CORBA::ULong tag,
@@ -192,6 +183,17 @@ public:
*/
TAO_Wait_Strategy *wait_strategy (void) const;
+ /// Callback method to reactively drain the outgoing data queue
+ int handle_output (void);
+
+ /**
+ * Return the TSS leader follower condition variable used in the
+ * Wait Strategy. Muxed Leader Follower implementation returns a
+ * valid condition variable, others return 0.
+ */
+ virtual TAO_SYNCH_CONDITION *leader_follower_condition_variable (void);
+
+#if 0
/// Send a request or queue it for later.
/**
* If the right policies are set queue the request for later.
@@ -235,6 +237,10 @@ public:
// @@ lockme
ssize_t send_buffered_messages (const ACE_Time_Value *max_wait_time = 0);
+ /// Send any messages that have been buffered.
+ ssize_t send_buffered_messages (const ACE_Time_Value *max_wait_time = 0);
+#endif /* 0 */
+
/**
* Initialising the messaging object. This would be used by the
* connector side. On the acceptor side the connection handler
@@ -340,9 +346,9 @@ public:
* down). In that case, it returns -1 and sets errno to
* <code>ENOENT</code>.
*/
- ssize_t send (const ACE_Message_Block *mblk,
- const ACE_Time_Value *timeout = 0,
- size_t *bytes_transferred = 0);
+ ssize_t send (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout = 0);
/// Read len bytes from into buf.
/**
@@ -429,9 +435,9 @@ protected:
* bytes already on the OS I/O subsystem.
*
*/
- virtual ssize_t send_i (const ACE_Message_Block *mblk,
- const ACE_Time_Value *timeout = 0,
- size_t *bytes_transferred = 0) = 0;
+ virtual ssize_t send_i (iovec *iov, int iovcnt,
+ size_t &bytes_transferred,
+ const ACE_Time_Value *timeout = 0) = 0;
// Read len bytes from into buf.
/**
@@ -589,8 +595,6 @@ public:
*/
virtual int reactor_signalling (void);
- //@}
-
/// Method for the connection handler to signify that it
/// is being closed and destroyed.
virtual void connection_handler_closing (void);
@@ -598,14 +602,18 @@ public:
/// Register the associated connection handler with the reactor
/// for a timer.
/**
- * At this point, only <code>TAO_Eager_Buffering_Sync_Strategy::timer_check()</code>
- * uses this, and it's unclear whether it needs to stay around. But, it's here
- * because it uses the associated protocol-specific connection handler, and accesses
- * to that must be serialized on the internal lock.
- *
- * @param arg argument passed to the handle_timeout() method of the event handler
+ * At this point, only
+ * <code>TAO_Eager_Buffering_Sync_Strategy::timer_check()</code>
+ * uses this, and it's unclear whether it needs to stay around.
+ * But, it's here because it uses the associated protocol-specific
+ * connection handler, and accesses to that must be serialized on
+ * the internal lock.
+ *
+ * @param arg argument passed to the handle_timeout() method of the
+ * event handler
* @param delay time interval after which the timer will expire
- * @param interval time interval after which the timer will be automatically rescheduled
+ * @param interval time interval after which the timer will be
+ * automatically rescheduled
* @return -1 on failure, a Reactor timer_id value on success
*
* @see ACE_Reactor::schedule_timer()
@@ -615,7 +623,6 @@ public:
const ACE_Time_Value &delay,
const ACE_Time_Value &interval = ACE_Time_Value::zero);
-
// Maintain reference counting with these
static TAO_Transport* _duplicate (TAO_Transport* transport);
static void release (TAO_Transport* transport);
@@ -624,15 +631,35 @@ public:
int recache_transport (TAO_Transport_Descriptor_Interface* desc);
/// Set/Get the Cache Map entry
- void cache_map_entry (
- TAO_Transport_Cache_Manager::HASH_MAP_ENTRY *entry);
+ void cache_map_entry (TAO_Transport_Cache_Manager::HASH_MAP_ENTRY *entry);
+ TAO_Transport_Cache_Manager::HASH_MAP_ENTRY *cache_map_entry (void);
+
+ /// Send a message block chain,
+ int send_message_block_chain (const ACE_Message_Block *message_block,
+ size_t &bytes_transferred,
+ ACE_Time_Value *max_wait_time = 0);
+
+ /// Sent the contents of <message_block>, blocking if required by
+ /// the twoway flag or by the current policies in the stub.
+ int send_message_i (TAO_Stub *stub,
+ int twoway_flag,
+ const ACE_Message_Block *message_block,
+ ACE_Time_Value *max_wait_time);
// TAO_Transport_Cache_Manager::HASH_MAP_ENTRY *& cache_map_entry (void);
+ /// Cache management
void mark_invalid (void);
+ /// Cache management
int make_idle (void);
+ /// Schedule handle_output() callbacks
+ int schedule_output (void);
+
+ /// Cancel handle_output() callbacks
+ int cancel_output (void);
+
protected:
// @@ see if one of these calls send_message()
/// Remove the first message from the outgoing queue.
@@ -654,6 +681,20 @@ protected:
int queued_message);
private:
+
+ /// Try to send the current message.
+ /**
+ * As the outgoing data is drained this method is invoked to send as
+ * much of the current message as possible.
+ *
+ * Returns 0 if there is more data to send, -1 if there was an error
+ * and 1 if the message was completely sent.
+ */
+ int send_current_message (void);
+
+ /// Copy the contents of a message block into a Queued_Message
+ TAO_Queued_Message *copy_message_block (const ACE_Message_Block *mb);
+
/// Prohibited
ACE_UNIMPLEMENTED_FUNC (TAO_Transport (const TAO_Transport&))
ACE_UNIMPLEMENTED_FUNC (void operator= (const TAO_Transport&))
@@ -676,6 +717,7 @@ protected:
/// Strategy for waiting for the reply after sending the request.
TAO_Wait_Strategy *ws_;
+#if 0
/// Queue for buffering transport messages.
TAO_Transport_Buffering_Queue *buffering_queue_;
@@ -684,6 +726,7 @@ protected:
/// Buffering timeout value.
ACE_Time_Value buffering_timeout_value_;
+#endif /* 0 */
/// Use to check if bidirectional info has been synchronized with
/// the peer.
@@ -707,6 +750,13 @@ protected:
*/
int bidirectional_flag_;
+ /// Synchronize access to the outgoing data queue
+ TAO_SYNCH_MUTEX queue_mutex_;
+
+ /// Implement the outgoing data queue
+ TAO_Queued_Message *head_;
+ TAO_Queued_Message *tail_;
+
/// Lock that insures that activities that *might* use handler-related
/// resources (such as a connection handler) get serialized.
/**
diff --git a/TAO/tao/Transport.inl b/TAO/tao/Transport.inl
index 53059e65190..797ed0618d3 100644
--- a/TAO/tao/Transport.inl
+++ b/TAO/tao/Transport.inl
@@ -1,5 +1,11 @@
// $Id$
+ACE_INLINE CORBA::ULong
+TAO_Transport::tag (void) const
+{
+ return this->tag_;
+}
+
ACE_INLINE TAO_ORB_Core *
TAO_Transport::orb_core (void) const
{
@@ -19,12 +25,7 @@ TAO_Transport::wait_strategy (void) const
return this->ws_;
}
-ACE_INLINE CORBA::ULong
-TAO_Transport::tag (void) const
-{
- return this->tag_;
-}
-
+#if 0
ACE_INLINE long
TAO_Transport::buffering_timer_id (void) const
{
@@ -77,6 +78,19 @@ TAO_Transport::dequeue_head (void)
message_block->release ();
}
+ACE_INLINE void
+TAO_Transport::dequeue_all (void)
+{
+ // Flush all queued messages.
+ if (this->buffering_queue_)
+ {
+ while (!this->buffering_queue_->is_empty ())
+ this->dequeue_head ();
+ }
+}
+
+#endif /* 0 */
+
ACE_INLINE int
TAO_Transport::bidirectional_flag (void) const
{
@@ -89,17 +103,6 @@ TAO_Transport::bidirectional_flag (int flag)
this->bidirectional_flag_ = flag;
}
-ACE_INLINE void
-TAO_Transport::dequeue_all (void)
-{
- // Flush all queued messages.
- if (this->buffering_queue_)
- {
- while (!this->buffering_queue_->is_empty ())
- this->dequeue_head ();
- }
-}
-
/*ACE_INLINE TAO_Transport_Cache_Manager::HASH_MAP_ENTRY *
TAO_Transport::cache_map_entry (void)
{
diff --git a/TAO/tao/Wait_On_Leader_Follower.cpp b/TAO/tao/Wait_On_Leader_Follower.cpp
index 6355fde2f19..6a6bcd49fd5 100644
--- a/TAO/tao/Wait_On_Leader_Follower.cpp
+++ b/TAO/tao/Wait_On_Leader_Follower.cpp
@@ -36,7 +36,9 @@ TAO_Wait_On_Leader_Follower::sending_request (TAO_ORB_Core *orb_core,
// Register the handler.
// @@ We could probably move this somewhere else, and remove this
// function totally. (Alex).
- this->transport_->register_handler ();
+ // @@ The handler is registered already, when the connection is
+ // created!
+ // this->transport_->register_handler ();
// Send the request.
return this->TAO_Wait_Strategy::sending_request (orb_core,
diff --git a/TAO/tao/default_resource.cpp b/TAO/tao/default_resource.cpp
index 091158a3f3b..20ac7511edd 100644
--- a/TAO/tao/default_resource.cpp
+++ b/TAO/tao/default_resource.cpp
@@ -11,6 +11,9 @@
#include "tao/Single_Reactor.h"
#include "tao/Priority_Mapping.h"
+#include "tao/Reactive_Flushing_Strategy.h"
+#include "tao/Block_Flushing_Strategy.h"
+
#include "ace/TP_Reactor.h"
#include "ace/Dynamic_Service.h"
#include "ace/Arg_Shifter.h"
@@ -33,6 +36,7 @@ TAO_Default_Resource_Factory::TAO_Default_Resource_Factory (void)
reactor_mask_signals_ (1),
dynamically_allocated_reactor_ (0),
cached_connection_lock_type_ (TAO_THREAD_LOCK)
+ , flushing_strategy_type_ (TAO_REACTIVE_FLUSHING)
{
}
@@ -194,6 +198,7 @@ TAO_Default_Resource_Factory::init (int argc, char **argv)
this->add_to_ior_parser_names (argv[curarg]);
}
}
+
else if (ACE_OS::strcasecmp (argv[curarg],
"-ORBConnectionCacheLock") == 0)
{
@@ -210,6 +215,7 @@ TAO_Default_Resource_Factory::init (int argc, char **argv)
this->cached_connection_lock_type_ = TAO_NULL_LOCK;
}
}
+
else if (ACE_OS::strcasecmp (argv[curarg],
"-ORBConnectionLock") == 0)
{
@@ -230,6 +236,7 @@ TAO_Default_Resource_Factory::init (int argc, char **argv)
this->cached_connection_lock_type_ = TAO_NULL_LOCK;
}
}
+
else if (ACE_OS::strcasecmp (argv[curarg],
"-ORBConnectorLock") == 0)
{
@@ -251,6 +258,23 @@ TAO_Default_Resource_Factory::init (int argc, char **argv)
}
}
+ else if (ACE_OS::strcasecmp (argv[curarg],
+ "-ORBFlushingStrategy") == 0)
+ {
+ curarg++;
+ if (curarg < argc)
+ {
+ char *name = argv[curarg];
+
+ if (ACE_OS::strcasecmp (name,
+ "reactive") == 0)
+ this->flushing_strategy_type_ = TAO_REACTIVE_FLUSHING;
+ else if (ACE_OS::strcasecmp (name,
+ "blocking") == 0)
+ this->flushing_strategy_type_ = TAO_BLOCKING_FLUSHING;
+ }
+ }
+
return 0;
}
@@ -699,6 +723,21 @@ TAO_Default_Resource_Factory::create_cached_connection_lock (void)
return the_lock;
}
+TAO_Flushing_Strategy *
+TAO_Default_Resource_Factory::create_flushing_strategy (void)
+{
+ TAO_Flushing_Strategy *strategy = 0;
+ if (this->flushing_strategy_type_ == TAO_REACTIVE_FLUSHING)
+ ACE_NEW_RETURN (strategy,
+ TAO_Reactive_Flushing_Strategy,
+ 0);
+ else
+ ACE_NEW_RETURN (strategy,
+ TAO_Block_Flushing_Strategy,
+ 0);
+ return strategy;
+}
+
TAO_Priority_Mapping *
TAO_Default_Resource_Factory::get_priority_mapping (void)
{
diff --git a/TAO/tao/default_resource.h b/TAO/tao/default_resource.h
index 300a823ac47..0d61930b49d 100644
--- a/TAO/tao/default_resource.h
+++ b/TAO/tao/default_resource.h
@@ -6,7 +6,8 @@
*
* $Id$
*
- * @author Chris CleelandCarlos O'Ryan
+ * @author Chris Cleeland
+ * @author Carlos O'Ryan
*/
//=============================================================================
@@ -91,6 +92,7 @@ public:
virtual double purge_percentage (void) const;
virtual TAO_Priority_Mapping *get_priority_mapping (void);
virtual ACE_Lock *create_cached_connection_lock (void);
+ virtual TAO_Flushing_Strategy *create_flushing_strategy (void);
protected:
/// Obtain the reactor implementation
@@ -161,6 +163,15 @@ private:
/// Type of lock used by the cached connector.
Lock_Type cached_connection_lock_type_;
+
+ enum Flushing_Strategy_Type
+ {
+ TAO_REACTIVE_FLUSHING,
+ TAO_BLOCKING_FLUSHING
+ };
+
+ /// Type of flushing strategy configured
+ int flushing_strategy_type_;
};
#if defined (__ACE_INLINE__)
diff --git a/TAO/tests/LongWrites/Coordinator.cpp b/TAO/tests/LongWrites/Coordinator.cpp
index 8520ae19963..d9e382e42d0 100644
--- a/TAO/tests/LongWrites/Coordinator.cpp
+++ b/TAO/tests/LongWrites/Coordinator.cpp
@@ -5,8 +5,11 @@
ACE_RCSID(LongWrites, Coordinator, "$Id$")
-Coordinator::Coordinator (void)
- : shutdown_called_ (0)
+Coordinator::Coordinator (CORBA::ULong initial_payload_size,
+ CORBA::Long test_iterations)
+ : initial_payload_size_ (initial_payload_size)
+ , test_iterations_ (test_iterations)
+ , shutdown_called_ (0)
, pairs_count_ (0)
, pairs_length_ (16)
{
@@ -59,12 +62,13 @@ Coordinator::start (CORBA::Environment &ACE_TRY_ENV)
}
}
- CORBA::ULong event_size = 256 * 1024;
+ CORBA::ULong event_size = this->initial_payload_size_;
ACE_DEBUG ((LM_DEBUG, "Running with payload = %d\n",
event_size));
for (size_t j = 0; j != this->pairs_count_; ++j)
{
- this->pairs_[j].sender->send_events (100, event_size,
+ this->pairs_[j].sender->send_events (this->test_iterations_,
+ event_size,
ACE_TRY_ENV);
ACE_CHECK;
}
diff --git a/TAO/tests/LongWrites/Coordinator.h b/TAO/tests/LongWrites/Coordinator.h
index db00336489a..9fe37a8e699 100644
--- a/TAO/tests/LongWrites/Coordinator.h
+++ b/TAO/tests/LongWrites/Coordinator.h
@@ -22,7 +22,8 @@ class Coordinator
{
public:
/// Constructor
- Coordinator (void);
+ Coordinator (CORBA::ULong initial_payload_size,
+ CORBA::Long test_iterations);
/// Destructor
virtual ~Coordinator (void);
@@ -46,13 +47,27 @@ public:
};
private:
+ /// Initial payload size
+ CORBA::ULong initial_payload_size_;
+
+ /// Number of iterations performed by each server.
+ CORBA::Long test_iterations_;
+
+ /// Synchronize internal data structure
ACE_SYNCH_MUTEX mutex_;
+ /// Set to 1 once the test has shutdown
int shutdown_called_;
+ /** @name List of pairs
+ *
+ * Implement a simple list of pairs
+ */
+ //@{
size_t pairs_count_;
size_t pairs_length_;
Pair* pairs_;
+ //@}
};
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
diff --git a/TAO/tests/LongWrites/Makefile b/TAO/tests/LongWrites/Makefile
index 28a98f85d48..3eb7de95bae 100644
--- a/TAO/tests/LongWrites/Makefile
+++ b/TAO/tests/LongWrites/Makefile
@@ -18,9 +18,9 @@ IDL_FILES = Test
IDL_SRC = TestC.cpp TestS.cpp
BIN = server client
-SRC = $(addsuffix .cpp, $(BIN) Receiver Sender Coordinator) $(IDL_SRC)
+SRC = $(addsuffix .cpp, $(BIN) Receiver Sender Sender_Task Coordinator) $(IDL_SRC)
-CLIENT_OBJS = client.o TestC.o TestS.o Receiver.o Sender.o
+CLIENT_OBJS = client.o TestC.o TestS.o Receiver.o Sender.o Sender_Task.o
SERVER_OBJS = server.o TestC.o TestS.o Coordinator.o
TAO_IDLFLAGS += -Ge 1
@@ -54,1486 +54,4 @@ realclean: clean
# DO NOT DELETE THIS LINE -- g++dep uses it.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-
-.obj/server.o .obj/server.so .shobj/server.o .shobj/server.so: server.cpp Coordinator.h \
- $(ACE_ROOT)/ace/pre.h TestS.h \
- TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
- TestS_T.h TestS_T.cpp TestS_T.i \
- $(ACE_ROOT)/ace/Get_Opt.h
-
-.obj/client.o .obj/client.so .shobj/client.o .shobj/client.so: client.cpp Sender.h \
- $(ACE_ROOT)/ace/pre.h TestS.h \
- TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
- TestS_T.h TestS_T.cpp TestS_T.i Receiver.h \
- $(ACE_ROOT)/ace/Get_Opt.h
-
-.obj/Receiver.o .obj/Receiver.so .shobj/Receiver.o .shobj/Receiver.so: Receiver.cpp Receiver.h \
- $(ACE_ROOT)/ace/pre.h TestS.h \
- TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
- TestS_T.h TestS_T.cpp TestS_T.i
-
-.obj/Sender.o .obj/Sender.so .shobj/Sender.o .shobj/Sender.so: Sender.cpp Sender.h \
- $(ACE_ROOT)/ace/pre.h TestS.h \
- TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
- TestS_T.h TestS_T.cpp TestS_T.i
-
-.obj/Coordinator.o .obj/Coordinator.so .shobj/Coordinator.o .shobj/Coordinator.so: Coordinator.cpp Coordinator.h \
- $(ACE_ROOT)/ace/pre.h TestS.h \
- TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
- TestS_T.h TestS_T.cpp TestS_T.i
-
-.obj/TestC.o .obj/TestC.so .shobj/TestC.o .shobj/TestC.so: TestC.cpp TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/pre.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/RequestInfo_Util.h \
- TestC.i
-
-.obj/TestS.o .obj/TestS.so .shobj/TestS.o .shobj/TestS.so: TestS.cpp TestS.h TestC.h \
- $(TAO_ROOT)/tao/corba.h \
- $(ACE_ROOT)/ace/pre.h \
- $(ACE_ROOT)/ace/ACE_export.h \
- $(ACE_ROOT)/ace/svc_export.h \
- $(ACE_ROOT)/ace/ace_wchar.h \
- $(ACE_ROOT)/ace/ace_wchar.inl \
- $(ACE_ROOT)/ace/OS_Errno.h \
- $(ACE_ROOT)/ace/OS_Export.h \
- $(ACE_ROOT)/ace/post.h \
- $(TAO_ROOT)/tao/corbafwd.h \
- $(ACE_ROOT)/ace/CDR_Base.h \
- $(ACE_ROOT)/ace/Basic_Types.h \
- $(ACE_ROOT)/ace/Message_Block.h \
- $(ACE_ROOT)/ace/ACE.h \
- $(ACE_ROOT)/ace/OS.h \
- $(ACE_ROOT)/ace/OS_Dirent.h \
- $(ACE_ROOT)/ace/OS_String.h \
- $(ACE_ROOT)/ace/OS_Memory.h \
- $(ACE_ROOT)/ace/OS_TLI.h \
- $(ACE_ROOT)/ace/Min_Max.h \
- $(ACE_ROOT)/ace/streams.h \
- $(ACE_ROOT)/ace/Trace.h \
- $(ACE_ROOT)/ace/Flag_Manip.h \
- $(ACE_ROOT)/ace/Flag_Manip.i \
- $(ACE_ROOT)/ace/Handle_Ops.h \
- $(ACE_ROOT)/ace/Handle_Ops.i \
- $(ACE_ROOT)/ace/Lib_Find.h \
- $(ACE_ROOT)/ace/Lib_Find.i \
- $(ACE_ROOT)/ace/Init_ACE.h \
- $(ACE_ROOT)/ace/Init_ACE.i \
- $(ACE_ROOT)/ace/Sock_Connect.h \
- $(ACE_ROOT)/ace/Sock_Connect.i \
- $(ACE_ROOT)/ace/ACE.i \
- $(ACE_ROOT)/ace/Malloc.h \
- $(ACE_ROOT)/ace/Log_Msg.h \
- $(ACE_ROOT)/ace/Log_Record.h \
- $(ACE_ROOT)/ace/Log_Priority.h \
- $(ACE_ROOT)/ace/Log_Record.i \
- $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \
- $(ACE_ROOT)/ace/Malloc_T.h \
- $(ACE_ROOT)/ace/Synch.h \
- $(ACE_ROOT)/ace/Synch_T.h \
- $(ACE_ROOT)/ace/Synch_T.cpp \
- $(ACE_ROOT)/ace/Thread.h \
- $(ACE_ROOT)/ace/Thread_Adapter.h \
- $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
- $(ACE_ROOT)/ace/Synch_T.i \
- $(ACE_ROOT)/ace/Atomic_Op.i \
- $(ACE_ROOT)/ace/Malloc_Allocator.h \
- $(ACE_ROOT)/ace/Malloc_Base.h \
- $(ACE_ROOT)/ace/Free_List.h \
- $(ACE_ROOT)/ace/Free_List.cpp \
- $(ACE_ROOT)/ace/Free_List.i \
- $(ACE_ROOT)/ace/Malloc_T.cpp \
- $(ACE_ROOT)/ace/Malloc_T.i \
- $(ACE_ROOT)/ace/Memory_Pool.h \
- $(ACE_ROOT)/ace/Event_Handler.h \
- $(ACE_ROOT)/ace/Signal.h \
- $(ACE_ROOT)/ace/Containers.h \
- $(ACE_ROOT)/ace/Containers_T.h \
- $(ACE_ROOT)/ace/Containers_T.cpp \
- $(ACE_ROOT)/ace/Containers_T.i \
- $(ACE_ROOT)/ace/Mem_Map.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \
- $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \
- $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \
- $(ACE_ROOT)/ace/Message_Block_T.h \
- $(ACE_ROOT)/ace/Message_Block_T.cpp \
- $(ACE_ROOT)/ace/Message_Block_T.i \
- $(TAO_ROOT)/tao/try_macros.h \
- $(TAO_ROOT)/tao/orbconf.h \
- $(ACE_ROOT)/ace/CORBA_macros.h \
- $(TAO_ROOT)/tao/varbase.h \
- $(TAO_ROOT)/tao/TAO_Export.h \
- $(TAO_ROOT)/tao/Environment.h \
- $(TAO_ROOT)/tao/ORB.h \
- $(TAO_ROOT)/tao/Exception.h \
- $(ACE_ROOT)/ace/SString.h \
- $(TAO_ROOT)/tao/Services.h \
- $(TAO_ROOT)/tao/Sequence.h \
- $(TAO_ROOT)/tao/Managed_Types.h \
- $(TAO_ROOT)/tao/Sequence_T.h \
- $(TAO_ROOT)/tao/Sequence_T.cpp \
- $(TAO_ROOT)/tao/Sequence_T.i \
- $(TAO_ROOT)/tao/CORBA_String.h \
- $(TAO_ROOT)/tao/PolicyC.h \
- $(TAO_ROOT)/tao/CurrentC.h \
- $(TAO_ROOT)/tao/Object.h \
- $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
- $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
- $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/Encodable.h \
- $(TAO_ROOT)/tao/CDR.h \
- $(ACE_ROOT)/ace/CDR_Stream.h \
- $(TAO_ROOT)/tao/Typecode.h \
- $(TAO_ROOT)/tao/Any.h \
- $(TAO_ROOT)/tao/NVList.h \
- $(TAO_ROOT)/tao/Principal.h \
- $(TAO_ROOT)/tao/OctetSeqC.h \
- $(TAO_ROOT)/tao/TAO_Server_Request.h \
- $(TAO_ROOT)/tao/Tagged_Profile.h \
- $(TAO_ROOT)/tao/IOPC.h \
- $(TAO_ROOT)/tao/GIOPC.h \
- $(TAO_ROOT)/tao/Object_KeyC.h \
- $(TAO_ROOT)/tao/Service_Context.h \
- $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/LocalObject.h \
- $(TAO_ROOT)/tao/Stub.h \
- $(TAO_ROOT)/tao/Pluggable.h \
- $(TAO_ROOT)/tao/MProfile.h \
- $(TAO_ROOT)/tao/Profile.h \
- $(TAO_ROOT)/tao/Tagged_Components.h \
- $(TAO_ROOT)/tao/CONV_FRAMEC.h \
- $(TAO_ROOT)/tao/GIOP_Message_State.h \
- $(TAO_ROOT)/tao/ORB_Core.h \
- $(TAO_ROOT)/tao/Policy_Manager.h \
- $(TAO_ROOT)/tao/Resource_Factory.h \
- $(ACE_ROOT)/ace/Service_Object.h \
- $(ACE_ROOT)/ace/Shared_Object.h \
- $(TAO_ROOT)/tao/Protocol_Factory.h \
- $(TAO_ROOT)/tao/params.h \
- $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
- $(TAO_ROOT)/tao/TAO_Singleton.h \
- $(TAO_ROOT)/tao/TAO_Singleton.cpp \
- $(ACE_ROOT)/ace/Object_Manager.h \
- $(ACE_ROOT)/ace/Managed_Object.h \
- $(ACE_ROOT)/ace/Managed_Object.cpp \
- $(ACE_ROOT)/ace/Managed_Object.i \
- $(TAO_ROOT)/tao/TAO_Singleton.inl \
- $(TAO_ROOT)/tao/Adapter.h \
- $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
- $(TAO_ROOT)/tao/PortableInterceptorC.h \
- $(TAO_ROOT)/tao/DynamicC.h \
- $(TAO_ROOT)/tao/MessagingC.h \
- $(TAO_ROOT)/tao/ValueBase.h \
- $(TAO_ROOT)/tao/ValueFactory.h \
- $(TAO_ROOT)/tao/TimeBaseC.h \
- $(TAO_ROOT)/tao/PollableC.h \
- $(ACE_ROOT)/ace/Map_Manager.h \
- $(ACE_ROOT)/ace/Map_Manager.cpp \
- $(ACE_ROOT)/ace/Service_Config.h \
- $(ACE_ROOT)/ace/Reactor.h \
- $(ACE_ROOT)/ace/Handle_Set.h \
- $(ACE_ROOT)/ace/Timer_Queue.h \
- $(ACE_ROOT)/ace/Timer_Queue_T.h \
- $(ACE_ROOT)/ace/Test_and_Set.h \
- $(ACE_ROOT)/ace/Test_and_Set.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
- $(ACE_ROOT)/ace/Timer_Queue_T.i \
- $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
- $(ACE_ROOT)/ace/Map_Manager.i \
- $(TAO_ROOT)/tao/Parser_Registry.h \
- $(TAO_ROOT)/tao/Service_Callbacks.h \
- $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
- $(TAO_ROOT)/tao/Transport_Cache_Manager.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Functor.h \
- $(ACE_ROOT)/ace/Functor_T.h \
- $(ACE_ROOT)/ace/Functor_T.cpp \
- $(ACE_ROOT)/ace/Functor_T.i \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
- $(TAO_ROOT)/tao/Cache_Entries.h \
- $(TAO_ROOT)/tao/Transport_Descriptor_Interface.h \
- $(TAO_ROOT)/tao/Endpoint.h \
- $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
- $(TAO_ROOT)/tao/Object_Ref_Table.h \
- $(TAO_ROOT)/tao/Interceptor_List.h \
- $(TAO_ROOT)/tao/RT_Policy_i.h \
- $(TAO_ROOT)/tao/RTCORBAC.h \
- $(TAO_ROOT)/tao/Protocols_Hooks.h \
- $(ACE_ROOT)/ace/Hash_Map_Manager.h \
- $(ACE_ROOT)/ace/Thread_Manager.h \
- $(ACE_ROOT)/ace/Singleton.h \
- $(ACE_ROOT)/ace/Singleton.cpp \
- $(ACE_ROOT)/ace/Singleton.i \
- $(TAO_ROOT)/tao/debug.h \
- $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
- $(TAO_ROOT)/tao/Invocation.h \
- $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/Reply_Dispatcher.h \
- $(TAO_ROOT)/tao/TAOC.h \
- $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
- $(TAO_ROOT)/tao/Priority_Mapping.h \
- $(TAO_ROOT)/tao/operation_details.h \
- $(TAO_ROOT)/tao/target_specification.h \
- $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
- $(TAO_ROOT)/tao/ObjectIDList.h \
- $(TAO_ROOT)/tao/DomainC.h \
- $(TAO_ROOT)/tao/ClientRequestInfo.h \
- $(TAO_ROOT)/tao/StringSeqC.h \
- $(TAO_ROOT)/tao/WrongTransactionC.h \
- $(TAO_ROOT)/tao/BoundsC.h \
- $(TAO_ROOT)/tao/PortableInterceptor.h \
- $(TAO_ROOT)/tao/BiDirPolicyC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
- $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
- $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
- $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
- $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
- $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
- $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
- TestS_T.h TestS_T.cpp TestS_T.i \
- $(TAO_ROOT)/tao/PortableServer/Object_Adapter.h \
- $(TAO_ROOT)/tao/PortableServer/Key_Adapters.h \
- $(ACE_ROOT)/ace/Map.h \
- $(ACE_ROOT)/ace/Map_T.h \
- $(ACE_ROOT)/ace/Pair.h \
- $(ACE_ROOT)/ace/Pair_T.h \
- $(ACE_ROOT)/ace/Pair_T.cpp \
- $(ACE_ROOT)/ace/Pair_T.i \
- $(ACE_ROOT)/ace/Active_Map_Manager.h \
- $(ACE_ROOT)/ace/Active_Map_Manager_T.h \
- $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \
- $(ACE_ROOT)/ace/Active_Map_Manager_T.i \
- $(ACE_ROOT)/ace/Map_T.cpp \
- $(ACE_ROOT)/ace/Map_T.i \
- $(TAO_ROOT)/tao/PortableServer/poa_macros.h \
- $(TAO_ROOT)/tao/PortableServer/Active_Object_Map.h \
- $(TAO_ROOT)/tao/PortableServer/Operation_Table.h \
- $(TAO_ROOT)/tao/RequestInfo_Util.h \
- TestS.i
-
# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/TAO/tests/LongWrites/Receiver.cpp b/TAO/tests/LongWrites/Receiver.cpp
index 6425de4a18a..7d7f23ea44c 100644
--- a/TAO/tests/LongWrites/Receiver.cpp
+++ b/TAO/tests/LongWrites/Receiver.cpp
@@ -11,6 +11,13 @@ Receiver::Receiver (void)
{
}
+CORBA::ULong
+Receiver::message_count (void)
+{
+ ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, 0);
+ return this->message_count_;
+}
+
void
Receiver::dump_results ()
{
@@ -31,5 +38,25 @@ Receiver::receive_data (const Test::Payload &payload,
this->message_count_++;
this->byte_count_ += payload.length ();
- ACE_DEBUG ((LM_DEBUG, "Receiver::receive_data\n"));
+ if (this->message_count_ % 100 == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Receiver::receive_data %d\n",
+ this->message_count_));
+ }
+}
+
+void
+Receiver::receive_data_oneway (const Test::Payload &payload,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->receive_data (payload, ACE_TRY_ENV);
+}
+
+Test::Payload *
+Receiver::return_data (const Test::Payload &payload,
+ CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return new Test::Payload (payload);
}
diff --git a/TAO/tests/LongWrites/Receiver.h b/TAO/tests/LongWrites/Receiver.h
index 5242259d81f..8a0b50d1d05 100644
--- a/TAO/tests/LongWrites/Receiver.h
+++ b/TAO/tests/LongWrites/Receiver.h
@@ -27,6 +27,9 @@ public:
/// Constructor
Receiver (void);
+ /// Return the number of messages received so far
+ CORBA::ULong message_count (void);
+
/// Print out the results
void dump_results (void);
@@ -34,6 +37,12 @@ public:
virtual void receive_data (const Test::Payload &payload,
CORBA::Environment &ACE_TRY_ENV)
ACE_THROW_SPEC ((CORBA::SystemException));
+ virtual void receive_data_oneway (const Test::Payload &payload,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ virtual Test::Payload *return_data (const Test::Payload &payload,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException));
private:
ACE_SYNCH_MUTEX mutex_;
diff --git a/TAO/tests/LongWrites/Sender.cpp b/TAO/tests/LongWrites/Sender.cpp
index 3d7926feb3b..4381c6b5a39 100644
--- a/TAO/tests/LongWrites/Sender.cpp
+++ b/TAO/tests/LongWrites/Sender.cpp
@@ -5,10 +5,13 @@
ACE_RCSID(LongWrites, Sender, "$Id$")
-Sender::Sender (void)
- : receiver_count_ (0)
+Sender::Sender (int test_type)
+ : test_type_ (test_type)
+ , receiver_count_ (0)
, receiver_length_ (16)
, shutdown_called_ (0)
+ , event_count_ (0)
+ , sender_task_ (this)
{
ACE_NEW (this->receivers_, Test::Receiver_var[this->receiver_length_]);
}
@@ -18,6 +21,17 @@ Sender::~Sender (void)
delete[] this->receivers_;
}
+int
+Sender::test_done (CORBA::ULong message_count)
+{
+ ACE_GUARD_RETURN (ACE_SYNCH_MUTEX, ace_mon, this->mutex_, 0);
+ return
+ (this->event_count_ != 0
+ && this->receiver_count_ != 0
+ && this->shutdown_called_ != 0
+ && (4 * this->receiver_count_
+ * this->event_count_ <= message_count));
+}
int
Sender::shutdown_called (void)
@@ -28,9 +42,10 @@ Sender::shutdown_called (void)
void
Sender::add_receiver (Test::Receiver_ptr receiver,
- CORBA::Environment &)
+ CORBA::Environment &)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->mutex_);
if (this->receiver_count_ == this->receiver_length_)
{
this->receiver_length_ *= 2;
@@ -47,35 +62,79 @@ Sender::add_receiver (Test::Receiver_ptr receiver,
void
Sender::send_events (CORBA::Long event_count,
- CORBA::ULong event_size,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::ULong event_size,
+ CORBA::Environment &ACE_TRY_ENV)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ {
+ ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->mutex_);
+ this->event_count_ = event_count;
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Sender::send_events - starting threads\n"));
+
+ this->sender_task_.run_test (4, event_count, event_size);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Sender::send_events - threads are active\n"));
+}
+
+int
+Sender::run_test (CORBA::Long event_count,
+ CORBA::ULong event_size)
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+
Test::Payload payload(event_size); payload.length(event_size);
+ for (CORBA::ULong j = 0; j != event_size; ++j)
+ {
+ payload[j] = CORBA::Octet(j % 256);
+ }
for (CORBA::Long i = 0; i != event_count; ++i)
{
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) - running iteration %d\n", i));
for (size_t j = 0; j != this->receiver_count_; ++j)
{
ACE_TRY
{
- this->receivers_[j]->receive_data (payload,
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
+ if (this->test_type_ == Sender::TEST_ONEWAY)
+ {
+ this->receivers_[j]->receive_data_oneway (payload,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ else if (this->test_type_ == Sender::TEST_WRITE)
+ {
+ this->receivers_[j]->receive_data (payload,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ else
+ {
+ Test::Payload_var retval =
+ this->receivers_[j]->return_data (payload,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ }
+ ACE_CATCH (CORBA::TRANSIENT, ignored)
+ {
}
ACE_CATCHANY
{
+ return -1;
}
ACE_ENDTRY;
}
}
+ return 0;
}
void
Sender::shutdown (CORBA::Environment &)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) shutting down\n"));
ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->mutex_);
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) shutting down\n"));
this->shutdown_called_ = 1;
}
diff --git a/TAO/tests/LongWrites/Sender.h b/TAO/tests/LongWrites/Sender.h
index 0bcbea6d50e..219d108174a 100644
--- a/TAO/tests/LongWrites/Sender.h
+++ b/TAO/tests/LongWrites/Sender.h
@@ -7,6 +7,7 @@
#include "ace/pre.h"
#include "TestS.h"
+#include "Sender_Task.h"
#if defined (_MSC_VER)
# if (_MSC_VER >= 1200)
@@ -22,14 +23,36 @@ class Sender
{
public:
/// Constructor
- Sender (void);
+ Sender (int test_type);
/// Destructor
virtual ~Sender (void);
+ /// Control the type of test
+ enum {
+ /// Run the test using receive_data_oneway() operations
+ TEST_ONEWAY,
+ /// Run the test using receive_data() operations
+ TEST_WRITE,
+ /// Run the test using return_data() operations
+ TEST_READ_WRITE,
+ };
+
+ /// Run the test in a separate thread
+ int run_test (CORBA::Long event_count,
+ CORBA::ULong event_size);
+
+ /// Return 1 after <shutdown> is invoked and all the messages are
+ /// received.
+ int test_done (CORBA::ULong message_count);
+
/// Return 1 after <shutdown> is invoked
int shutdown_called (void);
+ /// Return 1 if the test is finished, assuming <message_count>
+ /// messages have been received by the local Receiver
+ int iteration_done (CORBA::ULong messsage_count);
+
// = The skeleton methods
virtual void add_receiver (Test::Receiver_ptr receiver,
CORBA::Environment &ACE_TRY_ENV)
@@ -42,13 +65,25 @@ public:
ACE_THROW_SPEC ((CORBA::SystemException));
private:
+ /// The type of test
+ int test_type_;
+
+ /// Synchronize the internal state
ACE_SYNCH_MUTEX mutex_;
+ /// Keep track of all the receivers
size_t receiver_count_;
size_t receiver_length_;
Test::Receiver_var *receivers_;
+ /// Set to 1 if the shutdown() operations was called.
int shutdown_called_;
+
+ /// Setup event count
+ CORBA::ULong event_count_;
+
+ /// Used to run the threads
+ Sender_Task sender_task_;
};
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
diff --git a/TAO/tests/LongWrites/Test.idl b/TAO/tests/LongWrites/Test.idl
index 43d2eb7c3a3..de5dcee47ae 100644
--- a/TAO/tests/LongWrites/Test.idl
+++ b/TAO/tests/LongWrites/Test.idl
@@ -8,7 +8,13 @@ module Test
interface Receiver {
/// Receive a big payload
- oneway void receive_data (in Payload the_payload);
+ oneway void receive_data_oneway (in Payload the_payload);
+
+ /// Receive a big payload, using a twoway
+ void receive_data (in Payload the_payload);
+
+ /// Return the same data, useful to check the server side
+ Payload return_data (in Payload the_payload);
};
interface Sender {
@@ -20,7 +26,7 @@ module Test
in unsigned long event_size);
/// Shutdown the sender
- oneway void shutdown();
+ void shutdown();
};
interface Coordinator {
diff --git a/TAO/tests/LongWrites/client.cpp b/TAO/tests/LongWrites/client.cpp
index 5557ded8776..2c890404d66 100644
--- a/TAO/tests/LongWrites/client.cpp
+++ b/TAO/tests/LongWrites/client.cpp
@@ -8,23 +8,39 @@ ACE_RCSID(LongWrites, client, "$Id$")
const char *ior = "file://test.ior";
+int test_type = Sender::TEST_ONEWAY;
+
int
parse_args (int argc, char *argv[])
{
- ACE_Get_Opt get_opts (argc, argv, "k:");
+ ACE_Get_Opt get_opts (argc, argv, "k:t:");
int c;
while ((c = get_opts ()) != -1)
switch (c)
{
case 'k':
- ior = get_opts.optarg;
- break;
+ ior = get_opts.optarg;
+ break;
+ case 't':
+ if (ACE_OS_String::strcasecmp(get_opts.optarg, "ONEWAY") == 0)
+ test_type = Sender::TEST_ONEWAY;
+ else if (ACE_OS_String::strcasecmp(get_opts.optarg, "WRITE") == 0)
+ test_type = Sender::TEST_WRITE;
+ else if (ACE_OS_String::strcasecmp(get_opts.optarg, "READ_WRITE") == 0)
+ test_type = Sender::TEST_READ_WRITE;
+ else
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unknown test type %s\n",
+ get_opts.optarg), 1);
+ break;
+
case '?':
default:
ACE_ERROR_RETURN ((LM_ERROR,
"usage: %s "
- "-k <ior>"
+ "-k <ior> "
+ "-t <test_type (ONEWAY,WRITE,READ_WRITE)> "
"\n",
argv [0]),
-1);
@@ -90,7 +106,7 @@ main (int argc, char *argv[])
Sender *sender_impl;
ACE_NEW_RETURN (sender_impl,
- Sender,
+ Sender (test_type),
1);
PortableServer::ServantBase_var sender_owner_transfer(sender_impl);
@@ -105,18 +121,38 @@ main (int argc, char *argv[])
ACE_TRY_ENV);
ACE_TRY_CHECK;
- while (!sender_impl->shutdown_called ())
+ for (int i = 0; i != 600; ++i)
{
ACE_Time_Value tv(1, 0);
orb->run (tv, ACE_TRY_ENV);
ACE_TRY_CHECK;
+
+ CORBA::ULong message_count =
+ receiver_impl->message_count ();
+ if (sender_impl->test_done (message_count))
+ break;
}
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - client event loop done\n"));
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) client - threads finished\n"));
root_poa->destroy (1, 1, ACE_TRY_ENV);
ACE_TRY_CHECK;
orb->destroy (ACE_TRY_ENV);
ACE_TRY_CHECK;
+
+ CORBA::ULong message_count =
+ receiver_impl->message_count ();
+ if (!sender_impl->test_done (message_count))
+ {
+ ACE_ERROR ((LM_ERROR,
+ "ERROR: missing messages, only received %d\n",
+ message_count));
+ }
}
ACE_CATCHANY
{
@@ -126,5 +162,6 @@ main (int argc, char *argv[])
}
ACE_ENDTRY;
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) - client finished\n"));
return 0;
}
diff --git a/TAO/tests/LongWrites/run_test.pl b/TAO/tests/LongWrites/run_test.pl
index 71eafcca0b4..8b6f21474a8 100755
--- a/TAO/tests/LongWrites/run_test.pl
+++ b/TAO/tests/LongWrites/run_test.pl
@@ -7,54 +7,76 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
use lib '../../../bin';
use PerlACE::Run_Test;
+use Getopt::Std;
+
+local ($opt_i, $opt_p);
+
+if (!getopts ('i:p:')) {
+ print "Usage: run_test.pl [-p payload_size] [-i iterations]\n";
+ exit 1;
+}
+
+my $server_args = "";
+if (defined $opt_i) {
+ $server_args .= " -i ".$opt_i;
+}
+if (defined $opt_p) {
+ $server_args .= " -p ".$opt_p;
+}
$iorfile = PerlACE::LocalFile ("server.ior");
-unlink $iorfile;
-$SV = new PerlACE::Process ("server", "-o $iorfile");
-$CL1 = new PerlACE::Process ("client", " -k file://$iorfile ");
-$CL2 = new PerlACE::Process ("client", " -k file://$iorfile ");
-$CL3 = new PerlACE::Process ("client", " -k file://$iorfile ");
+foreach my $i ("ONEWAY") { # , "WRITE", "READ_WRITE") {
+
+ print "================ Running test $i ================\n";
+
+
+ unlink $iorfile;
+ $SV = new PerlACE::Process ("server", "-o $iorfile $server_args");
+ $CL1 = new PerlACE::Process ("client", " -k file://$iorfile -t $i");
+ $CL2 = new PerlACE::Process ("client", " -k file://$iorfile -t $i");
+ $CL3 = new PerlACE::Process ("client", " -k file://$iorfile -t $i");
-$SV->Spawn ();
+ $SV->Spawn ();
-if (PerlACE::waitforfile_timed ($iorfile, 5) == -1) {
+ if (PerlACE::waitforfile_timed ($iorfile, 5) == -1) {
print STDERR "ERROR: cannot find file <$iorfile>\n";
$SV->Kill (); $SV->TimedWait (1);
exit 1;
-}
+ }
-$CL1->Spawn (60);
-$CL2->Spawn (60);
-$CL3->Spawn (60);
+ $CL1->Spawn (1200);
+ $CL2->Spawn (1200);
+ $CL3->Spawn (1200);
-$client1 = $CL1->WaitKill (60);
+ $client1 = $CL1->WaitKill (60);
-if ($client1 != 0) {
+ if ($client1 != 0) {
print STDERR "ERROR: client 1 returned $client1\n";
$status = 1;
-}
+ }
-$client2 = $CL2->WaitKill (60);
+ $client2 = $CL2->WaitKill (60);
-if ($client2 != 0) {
+ if ($client2 != 0) {
print STDERR "ERROR: client 2 returned $client2\n";
$status = 1;
-}
+ }
-$client3 = $CL3->WaitKill (60);
+ $client3 = $CL3->WaitKill (60);
-if ($client3 != 0) {
+ if ($client3 != 0) {
print STDERR "ERROR: client 3 returned $client3\n";
$status = 1;
-}
+ }
-$server = $SV->TerminateWaitKill (5);
+ $server = $SV->TerminateWaitKill (5);
-if ($server != 0) {
+ if ($server != 0) {
print STDERR "ERROR: server returned $server\n";
$status = 1;
+ }
}
unlink $iorfile;
diff --git a/TAO/tests/LongWrites/server.cpp b/TAO/tests/LongWrites/server.cpp
index b57cafb201c..b431d67845b 100644
--- a/TAO/tests/LongWrites/server.cpp
+++ b/TAO/tests/LongWrites/server.cpp
@@ -8,23 +8,37 @@ ACE_RCSID(LongWrites, server, "$Id$")
const char *ior_output_file = "test.ior";
+CORBA::ULong initial_event_size = 64 * 1024;
+CORBA::Long test_iterations = 50;
+
int
parse_args (int argc, char *argv[])
{
- ACE_Get_Opt get_opts (argc, argv, "o:");
+ ACE_Get_Opt get_opts (argc, argv, "o:p:i:");
int c;
while ((c = get_opts ()) != -1)
switch (c)
{
case 'o':
- ior_output_file = get_opts.optarg;
- break;
+ ior_output_file = get_opts.optarg;
+ break;
+
+ case 'p':
+ initial_event_size = ACE_OS::atoi (get_opts.optarg);
+ break;
+
+ case 'i':
+ test_iterations = ACE_OS::atoi (get_opts.optarg);
+ break;
+
case '?':
default:
ACE_ERROR_RETURN ((LM_ERROR,
"usage: %s "
- "-o <iorfile>"
+ "-o <iorfile> "
+ "-p <payload_size> "
+ "-i <test_iterations> "
"\n",
argv [0]),
-1);
@@ -64,7 +78,8 @@ main (int argc, char *argv[])
Coordinator *coordinator_impl;
ACE_NEW_RETURN (coordinator_impl,
- Coordinator,
+ Coordinator (initial_event_size,
+ test_iterations),
1);
PortableServer::ServantBase_var coordinator_owner_transfer(coordinator_impl);
@@ -73,7 +88,7 @@ main (int argc, char *argv[])
ACE_TRY_CHECK;
CORBA::String_var ior =
- orb->object_to_string (coordinator.in (), ACE_TRY_ENV);
+ orb->object_to_string (coordinator.in (), ACE_TRY_ENV);
ACE_TRY_CHECK;
// If the ior_output_file exists, output the ior to it
@@ -82,7 +97,7 @@ main (int argc, char *argv[])
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot open output file for writing IOR: %s",
ior_output_file),
- 1);
+ 1);
ACE_OS::fprintf (output_file, "%s", ior.in ());
ACE_OS::fclose (output_file);
diff --git a/TAO/tests/Makefile b/TAO/tests/Makefile
index af18faeee15..f4655508ae2 100644
--- a/TAO/tests/Makefile
+++ b/TAO/tests/Makefile
@@ -60,7 +60,9 @@ DIRS = CDR \
Client_Leaks \
Server_Leaks \
Muxing \
- Hello
+ Hello \
+ Queued_Message_Test \
+ Big_Oneways
ifndef TAO_ROOT
TAO_ROOT = $(ACE_ROOT)/TAO
diff --git a/TAO/tests/README b/TAO/tests/README
index 3363e0f6ac0..fb242b1bd58 100644
--- a/TAO/tests/README
+++ b/TAO/tests/README
@@ -13,6 +13,10 @@ how to run the following tests:
This is a simple test for AMI callback model in combination with
timeouts (relative roundtrip timeout policy).
+ . Big_Oneways
+
+ Stress test non-blocking I/O features in the ORB.
+
. Bidirectional
This is a test that exercises the birectional GIOP connection