summaryrefslogtreecommitdiff
path: root/TAO/tests/LongWrites/Sender.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/LongWrites/Sender.cpp')
-rw-r--r--TAO/tests/LongWrites/Sender.cpp79
1 files changed, 69 insertions, 10 deletions
diff --git a/TAO/tests/LongWrites/Sender.cpp b/TAO/tests/LongWrites/Sender.cpp
index 3d7926feb3b..e3dab2ee42b 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_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;
}