summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsmit <msmit@remedy.nl>2010-04-14 09:52:28 +0000
committermsmit <msmit@remedy.nl>2010-04-14 09:52:28 +0000
commit384ed3d2c88fb9d6031680046ccd071f748ff515 (patch)
tree204c805ea0154c15c9a81dfa3072ca643120cc8b
parent1ad21b83b9198a87de4dfe00cadc455c5dfdc209 (diff)
downloadATCD-384ed3d2c88fb9d6031680046ccd071f748ff515.tar.gz
Wed Apr 14 09:49:12 UTC 2010 Marcel Smit <msmit@remedy.nl>
* connectors/dds4ccm/impl/dds/Getter_T.h: * connectors/dds4ccm/impl/dds/Getter_T.cpp: * connectors/dds4ccm/impl/dds/Reader_T.h: * connectors/dds4ccm/impl/dds/Reader_T.cpp: No narrow in the critical code path.
-rw-r--r--CIAO/ChangeLog8
-rw-r--r--CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp4
-rw-r--r--CIAO/connectors/dds4ccm/impl/dds/Getter_T.h2
-rw-r--r--CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp33
-rw-r--r--CIAO/connectors/dds4ccm/impl/dds/Reader_T.h1
5 files changed, 34 insertions, 14 deletions
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog
index bb1b436f702..89a0a013853 100644
--- a/CIAO/ChangeLog
+++ b/CIAO/ChangeLog
@@ -1,3 +1,11 @@
+Wed Apr 14 09:49:12 UTC 2010 Marcel Smit <msmit@remedy.nl>
+
+ * connectors/dds4ccm/impl/dds/Getter_T.h:
+ * connectors/dds4ccm/impl/dds/Getter_T.cpp:
+ * connectors/dds4ccm/impl/dds/Reader_T.h:
+ * connectors/dds4ccm/impl/dds/Reader_T.cpp:
+ No narrow in the critical code path.
+
Wed Apr 14 08:44:31 UTC 2010 Marijke Hengstmengel <mhengstmengel@remedy.nl>
* connectors/ami4ccm/tests/Exceptions/Receiver/ExceptionT_Receiver.mpc
diff --git a/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp b/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp
index 3debef97c3e..69508024614 100644
--- a/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp
@@ -34,7 +34,7 @@ CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::impl (void)
{
if (this->reader_)
{
- return DDS_TYPE::data_reader::narrow (this->reader_->get_impl ());
+ return this->reader_;
}
else
{
@@ -362,7 +362,7 @@ CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::set_impl (
}
else
{
- this->reader_ = reader;
+ this->reader_ = DDS_TYPE::data_reader::narrow (reader->get_impl ());;
this->create_conditions ();
}
}
diff --git a/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h b/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h
index dcea39a902b..e260f33c545 100644
--- a/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h
+++ b/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h
@@ -84,7 +84,7 @@ namespace CIAO
void set_queryparameters (const ::DDS_StringSeq & qp);
protected:
- CCM_DDS_DataReader_i * reader_;
+ typename DDS_TYPE::data_reader * reader_;
DDSQueryCondition * condition_;
::DDS::Duration_t time_out_;
::CCM_DDS::DataNumber_t max_delivered_data_;
diff --git a/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp b/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp
index ecfc048b600..df0a22f3382 100644
--- a/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp
@@ -14,6 +14,7 @@
template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::Reader_T (void)
: reader_ (0),
+ impl_ (0),
dds_get_ (0),
library_name_ (""),
profile_name_ ("")
@@ -36,9 +37,9 @@ template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
typename DDS_TYPE::data_reader *
CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::impl (void)
{
- if (this->reader_)
+ if (this->impl_)
{
- return DDS_TYPE::data_reader::narrow (this->reader_->get_impl ());
+ return this->impl_;
}
else
{
@@ -411,7 +412,7 @@ CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::create_contentfilte
throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
}
// Now, get the topic.
- ::DDSTopicDescription * td = this->reader_->get_impl ()->get_topicdescription ();
+ ::DDSTopicDescription * td = this->impl ()->get_topicdescription ();
if (!td)
{
DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_contentfilteredtopic - "
@@ -512,19 +513,21 @@ CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::create_filter (
"Error: Unable to create a new DataReader.\n"));
throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
}
- // Inform the Getter that there's a new DataReader created
+ // Remove the DataReader
if (this->dds_get_)
{
+ //Remove conditions in order to prevent a PRECONDITION_NOT_MET-error.
this->dds_get_->remove_conditions ();
- this->delete_datareader (sub);
- // Now we need to set the new created DataReader in our proxy classes.
- this->reader_->set_impl (dr);
- this->dds_get_->set_impl (this->reader_);
}
- else
+
+ this->delete_datareader (sub);
+ // Now we need to set the new created DataReader in our proxy classes.
+ this->reader_->set_impl (dr);
+ this->impl_ = DDS_TYPE::data_reader::narrow (this->reader_->get_impl ());
+
+ if (this->dds_get_)
{
- this->delete_datareader (sub);
- this->reader_->set_impl (dr);
+ this->dds_get_->set_impl (this->reader_);
}
}
@@ -679,4 +682,12 @@ CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::set_impl (
{
DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::set_impl");
this->reader_ = reader;
+ if (reader)
+ {
+ this->impl_ = DDS_TYPE::data_reader::narrow (reader->get_impl ());
+ }
+ else
+ {
+ this->impl_ = 0;
+ }
}
diff --git a/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h b/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h
index 20c6f49ef47..255b4de41d1 100644
--- a/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h
+++ b/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h
@@ -72,6 +72,7 @@ namespace CIAO
private:
CCM_DDS_DataReader_i *reader_;
+ typename DDS_TYPE::data_reader * impl_;
Getter_T<DDS_TYPE, CCM_TYPE, FIXED> * dds_get_;