summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-02-05 17:06:29 +0000
committerstanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-02-05 17:06:29 +0000
commit520ba0e779a775127ec47ab4d6858a135ea6e9a5 (patch)
tree96717f2bf96e7299badca4b557826370515d7604
parentd7fd95faa75121b2e4c051f9218a8e203410dd9a (diff)
downloadATCD-520ba0e779a775127ec47ab4d6858a135ea6e9a5.tar.gz
Merged changes from trunk.
-rw-r--r--ACE/ChangeLog27
-rw-r--r--ACE/OCI_RE_ChangeLog13
-rw-r--r--ACE/ace/Auto_Event.h10
-rw-r--r--ACE/bin/valgrind.supp9
-rw-r--r--ACE/protocols/ace/INet/inet.mpc41
-rw-r--r--ACE/protocols/examples/INet/FTP_Simple_exec.cpp (renamed from ACE/protocols/ace/INet/FTP_Simple_exec.cpp)4
-rw-r--r--ACE/protocols/examples/INet/HTTP_Simple_exec.cpp (renamed from ACE/protocols/ace/INet/HTTP_Simple_exec.cpp)0
-rw-r--r--ACE/protocols/examples/INet/inet.mpc42
-rw-r--r--ACE/tests/CDR_Test.cpp3
-rw-r--r--CIAO/ChangeLog19
-rw-r--r--CIAO/bin/ciao_tests.lst2
-rw-r--r--CIAO/connectors/dds4ccm/impl/DDS_Base_Connector_T.cpp21
-rw-r--r--CIAO/tests/Bug_4087_Regression/test.idl2
-rw-r--r--TAO/ChangeLog32
-rw-r--r--TAO/OCI_RE_ChangeLog13
-rw-r--r--TAO/bin/tao_orb_tests.lst2
-rw-r--r--TAO/docs/Options.html72
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp14
-rw-r--r--TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp68
-rw-r--r--TAO/tao/AnyTypeCode/Any_Dual_Impl_T.h7
-rw-r--r--TAO/tao/GIOP_Message_Base.cpp26
-rwxr-xr-xTAO/tests/Bug_4082_Regression/run_test.pl20
22 files changed, 325 insertions, 122 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog
index 972a9ddac2a..3db1bdf1e4b 100644
--- a/ACE/ChangeLog
+++ b/ACE/ChangeLog
@@ -1,3 +1,30 @@
+Mon Feb 4 08:58:35 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * protocols/ace/INet/inet.mpc:
+ * protocols/ace/INet/FTP_Simple_exec.cpp:
+ * protocols/ace/INet/HTTP_Simple_exec.cpp:
+ * protocols/examples/INet/FTP_Simple_exec.cpp:
+ * protocols/examples/INet/HTTP_Simple_exec.cpp:
+ * protocols/examples/INet/inet.mpc:
+ Moved INet examples out of the ace/INet directory and into
+ a new example directory
+
+Sat Feb 2 19:08:18 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * ace/Auto_Event.h:
+ Layout changes
+
+Thu Jan 31 19:21:31 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * tests/CDR_Test.cpp:
+ Test CDR_Size::write_boolean_array, according to Coverity
+ this method was not tested
+
+Wed Jan 30 11:58:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
+
+ * bin/valgrind.supp:
+ Add a supression for a faulty system zlib.
+
Mon Jan 28 23:33:25 UTC 2013 Adam Mitz <mitza@ociweb.com>
* include/makeinclude/platform_sunos5_g++.GNU:
diff --git a/ACE/OCI_RE_ChangeLog b/ACE/OCI_RE_ChangeLog
index 1b36813ade6..f9290fcb4d8 100644
--- a/ACE/OCI_RE_ChangeLog
+++ b/ACE/OCI_RE_ChangeLog
@@ -1,3 +1,16 @@
+Tue Feb 5 17:01:48 UTC 2013 "Kevin Stanley" <stanleyk@ociweb.com>
+
+ * ace/Auto_Event.h:
+ * bin/valgrind.supp:
+ * protocols/ace/INet/inet.mpc:
+ * protocols/examples/INet:
+ * tests/CDR_Test.cpp:
+ * protocols/ace/INet/FTP_Simple_exec.cpp:
+ * protocols/ace/INet/HTTP_Simple_exec.cpp:
+
+ Merged changes from trunk in preparation for merge. The
+ above files had changes.
+
Thu Jan 31 22:39:53 UTC 2013 Phillip LaBanca <labancap@ociweb.com>
* ace/Message_Block.cpp:
diff --git a/ACE/ace/Auto_Event.h b/ACE/ace/Auto_Event.h
index 3cf0aaf889d..5e62ca242f8 100644
--- a/ACE/ace/Auto_Event.h
+++ b/ACE/ace/Auto_Event.h
@@ -74,7 +74,8 @@ public:
const char *name = 0,
void *arg = 0)
: ACE_Auto_Event_T<ACE_System_Time_Policy> (initial_state, type, name, arg)
- {}
+ {
+ }
#if defined (ACE_HAS_WCHAR)
/// Constructor which will create auto event (wchar_t version)
@@ -83,11 +84,14 @@ public:
const wchar_t *name,
void *arg = 0)
: ACE_Auto_Event_T<ACE_System_Time_Policy> (initial_state, type, name, arg)
- {}
+ {
+ }
#endif /* ACE_HAS_WCHAR */
/// Default dtor.
- virtual ~ACE_Auto_Event (void) {}
+ virtual ~ACE_Auto_Event (void)
+ {
+ }
};
ACE_END_VERSIONED_NAMESPACE_DECL
diff --git a/ACE/bin/valgrind.supp b/ACE/bin/valgrind.supp
index f5965b6903b..ced872249fe 100644
--- a/ACE/bin/valgrind.supp
+++ b/ACE/bin/valgrind.supp
@@ -304,3 +304,12 @@
fun:_ZN3ACE10nibble2hexEj
fun:_ZN5CORBA3ORB16object_to_stringEPNS_6ObjectE
}
+
+{
+ <zlib Conditional jump or move depends on uninitialised value(s)>
+ Memcheck:Cond
+ obj:/usr/lib/libz.so.1.2.3
+ obj:/usr/lib/libz.so.1.2.3
+ fun:deflate
+ fun:compress2
+} \ No newline at end of file
diff --git a/ACE/protocols/ace/INet/inet.mpc b/ACE/protocols/ace/INet/inet.mpc
index d7b676a4b76..9f7efdbd89c 100644
--- a/ACE/protocols/ace/INet/inet.mpc
+++ b/ACE/protocols/ace/INet/inet.mpc
@@ -9,7 +9,6 @@ project(INet) : acelib, ace_output, install {
avoids += old_stdstream
avoids += exclude_inet
avoids += ace_for_tao
- avoids += corba_e_compact
Source_Files {
IOS_util.cpp
INet_Log.cpp
@@ -60,43 +59,3 @@ project(INet) : acelib, ace_output, install {
}
}
-
-// This project will be generated with and without ssl=1 feature
-// but will only build when the ssl macro != 1 (i.e. ssl off)
-project(HTTP_Simple_exec) : aceexe, inet {
- exename = http_simple_wget
- Source_Files {
- HTTP_Simple_exec.cpp
- }
- verbatim(gnuace, circuit) {
- "ifeq ($(ssl),1)"
- "override BIN:="
- "ifdef ARCH"
- "override ARCH_BIN:="
- "endif #ARCH"
- "all: avoid_warning"
- "endif"
- }
-
- verbatim(gnuace, local) {
- "ifeq ($(ssl),1)"
- "avoids_enabled_macros += ssl"
- "endif"
- }
-}
-
-// This project will only be generated with the ssl=1 feature
-// and will only build when the ssl macro = 1 (i.e. ssl on)
-project(HTTPS_Simple_exec) : aceexe, inet, inetssl {
- exename = https_simple_wget
- Source_Files {
- HTTP_Simple_exec.cpp
- }
-}
-
-project(FTP_Simple_exec) : aceexe, inet {
- exename = ftp_simple_wget
- Source_Files {
- FTP_Simple_exec.cpp
- }
-}
diff --git a/ACE/protocols/ace/INet/FTP_Simple_exec.cpp b/ACE/protocols/examples/INet/FTP_Simple_exec.cpp
index 8381f2aaf45..48838fe3a8a 100644
--- a/ACE/protocols/ace/INet/FTP_Simple_exec.cpp
+++ b/ACE/protocols/examples/INet/FTP_Simple_exec.cpp
@@ -3,8 +3,8 @@
#include "ace/Get_Opt.h"
#include "ace/Auto_Ptr.h"
#include "ace/OS_NS_errno.h"
-#include "FTP_URL.h"
-#include "FTP_ClientRequestHandler.h"
+#include "ace/INet/FTP_URL.h"
+#include "ace/INet/FTP_ClientRequestHandler.h"
#include <iostream>
#include <fstream>
diff --git a/ACE/protocols/ace/INet/HTTP_Simple_exec.cpp b/ACE/protocols/examples/INet/HTTP_Simple_exec.cpp
index 9dda462b99a..9dda462b99a 100644
--- a/ACE/protocols/ace/INet/HTTP_Simple_exec.cpp
+++ b/ACE/protocols/examples/INet/HTTP_Simple_exec.cpp
diff --git a/ACE/protocols/examples/INet/inet.mpc b/ACE/protocols/examples/INet/inet.mpc
new file mode 100644
index 00000000000..16f42462566
--- /dev/null
+++ b/ACE/protocols/examples/INet/inet.mpc
@@ -0,0 +1,42 @@
+// -*- MPC -*-
+// $Id$
+
+// This project will be generated with and without ssl=1 feature
+// but will only build when the ssl macro != 1 (i.e. ssl off)
+project(HTTP_Simple_exec) : aceexe, inet {
+ exename = http_simple_wget
+ Source_Files {
+ HTTP_Simple_exec.cpp
+ }
+ verbatim(gnuace, circuit) {
+ "ifeq ($(ssl),1)"
+ "override BIN:="
+ "ifdef ARCH"
+ "override ARCH_BIN:="
+ "endif #ARCH"
+ "all: avoid_warning"
+ "endif"
+ }
+
+ verbatim(gnuace, local) {
+ "ifeq ($(ssl),1)"
+ "avoids_enabled_macros += ssl"
+ "endif"
+ }
+}
+
+// This project will only be generated with the ssl=1 feature
+// and will only build when the ssl macro = 1 (i.e. ssl on)
+project(HTTPS_Simple_exec) : aceexe, inet, inetssl {
+ exename = https_simple_wget
+ Source_Files {
+ HTTP_Simple_exec.cpp
+ }
+}
+
+project(FTP_Simple_exec) : aceexe, inet {
+ exename = ftp_simple_wget
+ Source_Files {
+ FTP_Simple_exec.cpp
+ }
+}
diff --git a/ACE/tests/CDR_Test.cpp b/ACE/tests/CDR_Test.cpp
index 0fc27ae2fc8..a9ff114e94f 100644
--- a/ACE/tests/CDR_Test.cpp
+++ b/ACE/tests/CDR_Test.cpp
@@ -118,6 +118,7 @@ short_stream (void)
ACE_CDR::Long l_array[3] = { -345678, 0, 345678 };
ACE_CDR::Float f_array[3] = { -1.23f, 0.0f, 1.23f };
ACE_CDR::Double d_array[3] = { -123.456789, 0.0, 123.456789 };
+ ACE_CDR::Boolean b_array[3] = { false, true, false };
ACE_OutputCDR::from_char fc (ch);
ACE_OutputCDR::from_wchar fwc (wch);
@@ -135,6 +136,7 @@ short_stream (void)
os.write_long_array (l_array, 3);
os.write_float_array (f_array, 3);
os.write_double_array (d_array, 3);
+ os.write_boolean_array (b_array, 3);
// Do the same for size stream.
ss << fc;
@@ -151,6 +153,7 @@ short_stream (void)
ss.write_long_array (l_array, 3);
ss.write_float_array (f_array, 3);
ss.write_double_array (d_array, 3);
+ ss.write_boolean_array (b_array, 3);
// Check the size.
if (ss.total_length () != os.total_length ())
diff --git a/CIAO/ChangeLog b/CIAO/ChangeLog
index 4ca44a9819d..a78145e88b7 100644
--- a/CIAO/ChangeLog
+++ b/CIAO/ChangeLog
@@ -1,3 +1,22 @@
+Mon Feb 4 08:11:50 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * connectors/dds4ccm/impl/DDS_Base_Connector_T.cpp (activate_topic):
+ Fixed logic error, when no listener is passed in we create
+ the default one, but always install a listener. Thanks to
+ Jiang Wei <jiangwei_1976 at yahoo dot com dot cn> for
+ reporting this problem. This fixes bugzilla 4089
+
+Sun Feb 3 18:37:32 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/ciao_tests.lst:
+ Added !NO_IDL3_TO_IDL2 to Bug_4087_Regression, invoking idl3_to_idl2
+ means we need gcc which we don't have on all targets
+
+Thu Jan 31 11:33:37 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
+
+ * bin/ciao_tests.lst:
+ Fixed path 4087 test
+
Tue Jan 29 12:20:08 UTC 2013 Johnny Willemsen <jwillemsen@remedy.nl>
* tools/IDL3_to_IDL2/idl3_to_idl2_visitor.cpp:
diff --git a/CIAO/bin/ciao_tests.lst b/CIAO/bin/ciao_tests.lst
index ea9272eb5a5..588d5ae77e9 100644
--- a/CIAO/bin/ciao_tests.lst
+++ b/CIAO/bin/ciao_tests.lst
@@ -41,7 +41,7 @@ TAO/CIAO/tests/Bug_3937_Regression/run_test.pl
TAO/CIAO/tests/Bug_3944_Regression/run_test.pl
TAO/CIAO/tests/Bug_4086_Regression/descriptors/run_test.pl:
TAO/CIAO/tests/Bug_4086_Regression/descriptors/run_test_cdr.pl:
-TAO/CIAO/tests/Bug_4087_Regression/descriptors/run_test.pl:
+TAO/CIAO/tests/Bug_4087_Regression/run_test.pl: !NO_IDL3_TO_IDL2
TAO/CIAO/tests/IDL_Test/Cornucopia/run_test.pl: DOXYGEN
TAO/CIAO/tests/Cookies/run_test.pl
TAO/CIAO/tests/TTSCTest/descriptors/run_test.pl:
diff --git a/CIAO/connectors/dds4ccm/impl/DDS_Base_Connector_T.cpp b/CIAO/connectors/dds4ccm/impl/DDS_Base_Connector_T.cpp
index 68bc90fd0ae..3bddcee0e7d 100644
--- a/CIAO/connectors/dds4ccm/impl/DDS_Base_Connector_T.cpp
+++ b/CIAO/connectors/dds4ccm/impl/DDS_Base_Connector_T.cpp
@@ -779,6 +779,8 @@ DDS_Base_Connector_T<CCM_TYPE>::activate_topic (
if (mask != 0)
{
+ // If no listener has been passed in we create the default
+ // topic listener
if (::CORBA::is_nil (listener))
{
ACE_NEW_THROW_EX (listener,
@@ -786,18 +788,17 @@ DDS_Base_Connector_T<CCM_TYPE>::activate_topic (
error_listener.in (),
reactor),
::CORBA::NO_MEMORY ());
+ }
- DDS::ReturnCode_t const retcode = topic->set_listener (listener,
- mask);
+ DDS::ReturnCode_t const retcode = topic->set_listener (listener, mask);
- if (retcode != ::DDS::RETCODE_OK)
- {
- DDS4CCM_ERROR (DDS4CCM_LOG_LEVEL_ERROR, (LM_ERROR, DDS4CCM_INFO
- "DDS_Base_Connector_T::activate_topic - "
- "Error while setting the listener on the topic - <%C>\n",
- ::CIAO::DDS4CCM::translate_retcode (retcode)));
- throw ::CORBA::INTERNAL ();
- }
+ if (retcode != ::DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (DDS4CCM_LOG_LEVEL_ERROR, (LM_ERROR, DDS4CCM_INFO
+ "DDS_Base_Connector_T::activate_topic - "
+ "Error while setting the listener on the topic - <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retcode)));
+ throw ::CORBA::INTERNAL ();
}
}
}
diff --git a/CIAO/tests/Bug_4087_Regression/test.idl b/CIAO/tests/Bug_4087_Regression/test.idl
index e0c2aa1956d..56b0b6feea5 100644
--- a/CIAO/tests/Bug_4087_Regression/test.idl
+++ b/CIAO/tests/Bug_4087_Regression/test.idl
@@ -1,3 +1,5 @@
+// $Id$
+
#ifndef FOO_IDL
#define FOO_IDL
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 4717ec4755a..32f48c32aba 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,35 @@
+Tue Feb 5 13:46:00 UTC 2013 Simon Massey <simon.massey@prismtech.com>
+
+ * docs/Options.html:
+
+ Typo corrections.
+
+Fri Feb 1 15:13:31 UTC 2013 Adam Mitz <mitza@ociweb.com>
+
+ * tao/AnyTypeCode/Any_Dual_Impl_T.h:
+ * tao/AnyTypeCode/Any_Dual_Impl_T.cpp:
+
+ Fixed bug 4082: allows extraction to type that's equivalent
+ but not equal, as required by the spec. The common example
+ is different sequences with the same base type.
+
+ * bin/tao_orb_tests.lst:
+ * tests/Bug_4082_Regression/run_test.pl:
+
+ Added test script and removed condition for !FIXED_BUGS_ONLY.
+
+Thu Jan 31 17:46:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
+
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp:
+ Remove any unprocessed but dequeued/completed messages at shutdown.
+
+Wed Jan 30 12:44:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
+
+ * tao/GIOP_Message_Base.cpp:
+ Fix a memory leak of a datablock due to ZIOP decompression (possiably)
+ replacing it. If replaced the original db may need to be released and
+ the new db always does.
+
Tue Jan 29 11:00:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com>
* orbsvcs/tests/Miop/McastFragmentation/run_test.pl:
diff --git a/TAO/OCI_RE_ChangeLog b/TAO/OCI_RE_ChangeLog
index 82a3f384b0a..09887403796 100644
--- a/TAO/OCI_RE_ChangeLog
+++ b/TAO/OCI_RE_ChangeLog
@@ -1,3 +1,16 @@
+Tue Feb 5 17:00:14 UTC 2013 "Kevin Stanley" <stanleyk@ociweb.com>
+
+ * bin/tao_orb_tests.lst:
+ * docs/Options.html:
+ * orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp:
+ * tao/AnyTypeCode/Any_Dual_Impl_T.h:
+ * tao/AnyTypeCode/Any_Dual_Impl_T.cpp:
+ * tao/GIOP_Message_Base.cpp:
+ * tests/Bug_4082_Regression/run_test.pl:
+
+ Merged changes from trunk in preparation for merge. The
+ above files had changes.
+
Mon Feb 4 22:57:48 UTC 2013 Kevin Stanley <stanleyk@ociweb.com>
* orbsvcs/Naming_Service/FT_Naming_Service.h:
diff --git a/TAO/bin/tao_orb_tests.lst b/TAO/bin/tao_orb_tests.lst
index 2723abe0daa..307d82c9491 100644
--- a/TAO/bin/tao_orb_tests.lst
+++ b/TAO/bin/tao_orb_tests.lst
@@ -207,7 +207,7 @@ TAO/tests/Bug_3942_Regression/run_test.pl: !FIXED_BUGS_ONLY
TAO/tests/Bug_3953_Regression/run_test.pl: !CORBA_E_MICRO
TAO/tests/Bug_3954_Regression/run_test.pl:
TAO/tests/Bug_4010_Regression/run_test.pl:
-TAO/tests/Bug_4082_Regression/run_test.pl: !FIXED_BUGS_ONLY !MINIMUM !CORBA_E_COMPACT !CORBA_E_MICRO
+TAO/tests/Bug_4082_Regression/run_test.pl: !MINIMUM !CORBA_E_COMPACT !CORBA_E_MICRO
TAO/tests/DIOP/run_test.pl: !ST !NO_DIOP !ACE_FOR_TAO !CORBA_E_MICRO
TAO/tests/DIOP/run_test_ipv6.pl: IPV6 !ST !NO_DIOP !ACE_FOR_TAO !CORBA_E_MICRO
TAO/tests/RTCORBA/Activate_Object_Multiple_ORBs/run_test.pl: !MINIMUM !CORBA_E_COMPACT !CORBA_E_MICRO !ST
diff --git a/TAO/docs/Options.html b/TAO/docs/Options.html
index ecdae650c43..0161ad646bc 100644
--- a/TAO/docs/Options.html
+++ b/TAO/docs/Options.html
@@ -1806,7 +1806,7 @@ strategy.
service configurator directive of the form (all on one line):
<p><code>dynamic MIOP_Resource_Factory Service_Object *
TAO_PortableGroup:_make_TAO_MIOP_Resource_Factory () ""</code></p>
- Normally in order to setup the MIOP implementation correctly, the application
+ Normally in order to set up the MIOP implementation correctly, the application
will have to use other service configurator directives as well (for example):
<p><code>dynamic UIPMC_Factory Service_Object *
TAO_PortableGroup:_make_TAO_UIPMC_Protocol_Factory() ""<br>
@@ -1817,14 +1817,14 @@ strategy.
dynamic MIOP_Resource_Factory Service_Object *
TAO_PortableGroup:_make_TAO_MIOP_Resource_Factory () ""</code></p>
Any options required to be given to the MIOP_Resource_Factory should be
- specified between the two double-quotes shown above as a space seporated list;
+ specified between the two double-quotes shown above as a space separated list;
however none are required as all options take default values if not specified.
Since MIOP uses UDP sockets (which is not a "reliable" transport unlike tcp/ip)
it is easy to configure MIOP in such a way that messages will not actually
reach the servant. The options below are intended to maximize MIOP reliability
- but they must be used with care, users of MIOP must understand that large
+ but they must be used with care; users of MIOP must understand that large
messages are sent in fragments and they have to be reassembled by the server in
- their entirety to be useable by the servant. If even a single data
+ their entirety to be usable by the servant. If even a single data
fragment/packet is lost, the whole message cannot be reconstructed and will be
unusable. There is no way for the servant to even know it has missed such a
MIOP message, and being a one-way protocol, neither will the client be aware
@@ -1838,7 +1838,7 @@ strategy.
client-side OS simply ignores the excess send requests and some of the
fragments are not actually sent on the wire.)
<li>
- The server socket's receive buffer became too full to aquire the fragments off
+ The server socket's receive buffer became too full to acquire the fragments off
the wire. (In this case the client is again sending messages too fast, but this
time it is the servant that is too slow to process the messages it has already
received.)
@@ -1849,7 +1849,7 @@ strategy.
<p></p>
<p style="Z-INDEX: 0">In the first two cases above, the loss can be mitigated by
the client adapting/throttling its sending rate so as to not overflow the
- capacity of the clients operating system sending buffer and the receiving
+ capacity of the client's operating system sending buffer and the receiving
buffer of the server socket. If there are multiple clients all sending to the
same server, all of these clients must be configured to slow down their sending
rate (as a software system design descision) as otherwise the server's receive
@@ -1870,13 +1870,13 @@ strategy.
fragments that a client can break the outgoing message up into. The limit must
be a positive number or zero (indicating an unlimited number). The default is
normally <em>0 (i.e. unlimited)</em>, but this default can be overriden when
- the TAO libraries are built in the <code>ace/config.h</code>, by specifying the
+ the TAO libraries are built in <code>ace/config.h</code>, by specifying the
new default limit such as <code>#define&nbsp;TAO_DEFAULT_MIOP_MAX_FRAGMENTS&nbsp;1</code>
which in this case would turn off fragmentation by default (as only a single
fragment would be allowed), unless a new limit is specified in the service
file. Any messages that are too large and require more fragments than allowed
by this setting are simply not transmitted by the client (the message is
- effectly lost without any error indication, other than possiably a debug
+ effectly lost without any error indication, other than possibly a debug
message). This setting can be used as a safety setting to stop swamping the
network and servants with abnormally large messages, or during testing to
"lose" large messages for whatever reason.
@@ -1896,7 +1896,7 @@ strategy.
the system, but this can be overridden in the <code>ace/config.h</code> by
giving a new value for <code>#define&nbsp;TAO_DEFAULT_MIOP_FRAGMENT_SIZE&nbsp;65507</code>
when the TAO libraries are built. <b>Note: most gateways and routing networks
- define an MTU of around <em>1458-1500</em>, it is therefore advisable to
+ define an MTU of around <em>1458-1500</em>; it is therefore advisable to
specify the correct <code>&#8209;ORBMaxFragmentSize</code> value otherwise some
fragments may be lost.</b> See also the <code>&#8209;ORBSndSock</code> option
below. Note also if this value is changed (during development) and the <code>&#8209;ORBMaxFragmentRate</code>
@@ -1970,7 +1970,7 @@ strategy.
limits the maximum size of an individual message fragment, larger fragments can
be simply ignored (i.e. packet loss) by the client's socket without any error
indication; this value and the <code>&#8209;ORBMaxFragmentSize</code> should be
- set with care. For a linux type OS, the systems SndSock is usually defaulted to
+ set with care. For a Linux type OS, the system's SndSock is usually defaulted to
about <b>65535</b> bytes, but whatever value is actually specified it is
normally doubled internally to take account of the control structures required
to track the messages themselves and so it is not a hard limit.
@@ -1978,19 +1978,19 @@ strategy.
</tr>
<tr>
<td ALIGN="left"><code>&#8209;ORBRcvSock</code> <em>bytes</em></td>
- <td ALIGN="left">This server-side option is the size of the incoming socket's
- message buffer, i.e how much data can be received directly off the wire by the
- server and queued for processing by the servant whilst it is busy. If specified
- in the service configuration file, this value will override (for MIOP only) the
- value specified by the corresponding ORB_init parameter. If NOT specified in
- either place, the default value for the system itself will be used. Again for a
- linux type OS, the systems RcvSock is usually about <b>65535</b> bytes, but
- whatever value is actually specified it is normally doubled internally to take
- account of the control structures required to track the messages themselves and
- so it is not a hard limit. Specifying as large a value as possible (i.e.
+ <td ALIGN="left">This server-side option is the size of the incoming socket's
+ message buffer, i.e., how much data can be received directly off the wire by the
+ server and queued for processing by the servant whilst it is busy. If specified
+ in the service configuration file, this value will override (for MIOP only) the
+ value specified by the corresponding ORB_init parameter. If NOT specified in
+ either place, the default value for the system itself will be used. Again for a
+ Linux type OS, the systems RcvSock is usually about <b>65535</b> bytes, but
+ whatever value is actually specified it is normally doubled internally to take
+ account of the control structures required to track the messages themselves and
+ so it is not a hard limit. Specifying as large a value as possible (i.e.
whatever upper limit the OS will allow) with the MIOP <code>&#8209;ORBRcvSock</code>
- option is advisable to maximize the available sockets receive buffer space, but
- obviosuly this is a trade off between available memory and other OS non-paged
+ option is advisable to maximize the available socket's receive buffer space, but
+ obviously this is a trade off between available memory and other OS non-paged
memory uses.
</td>
</tr>
@@ -1999,20 +1999,20 @@ strategy.
<td ALIGN="left">This is a server-side option that is enabled by default;
although this default can be overriden when the TAO libraries are built in the <CODE>
ace/config.h</CODE>, by specifying the new default such as <CODE>#define&nbsp;TAO_DEFAULT_MIOP_EAGER_DEQUEUEING&nbsp;false</CODE>
- which in this case would turn this off by default, unless specified in the
- service file. If disabled (0) each thread servicing the MIOP listener will only
- dequeue enough MIOP message fragments from the socket receive buffer to
- complete a single full MIOP message which it will then process. This action
- reduces the amount of user memory consumed by the server process, but it also
- increases the likelyhood of the OS sockets receive buffer overflowing (as
- whilst processing each message, the thread cannot dequeue other incomming
- message fragments). If enabled (1) it specifies that each server thread will
- attempt to dequeue all available MIOP messages from the receiver's socket and
- queue these up in a user memory FIFO queue, before attempting to process a
- single MIOP message from the head of this FIFO queue. This action attempts to
- speed up the dequeueing of MIOP messages from the OS socket receive buffer
- (with a corresponding increase in the amount of user memory consumed by the
- server process) so as to limit the number of MIOP messages that the server may
+ which in this case would turn this off by default, unless specified in the
+ service file. If disabled (0) each thread servicing the MIOP listener will only
+ dequeue enough MIOP message fragments from the socket receive buffer to
+ complete a single full MIOP message which it will then process. This action
+ reduces the amount of user memory consumed by the server process, but it also
+ increases the likelihood of the OS sockets receive buffer overflowing (as
+ whilst processing each message, the thread cannot dequeue other incomming
+ message fragments). If enabled (1) it specifies that each server thread will
+ attempt to dequeue all available MIOP messages from the receiver's socket and
+ queue these up in a user memory FIFO queue, before attempting to process a
+ single MIOP message from the head of this FIFO queue. This action attempts to
+ speed up the dequeueing of MIOP messages from the OS socket receive buffer
+ (with a corresponding increase in the amount of user memory consumed by the
+ server process) so as to limit the number of MIOP messages that the server may
miss due to the OS sockets receive buffer becoming full.
</td>
</tr>
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp
index 22459eb5b44..8c11cccec13 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/UIPMC_Mcast_Transport.cpp
@@ -34,6 +34,18 @@ TAO_UIPMC_Mcast_Transport::~TAO_UIPMC_Mcast_Transport (void)
{
// Cleanup all packets.
this->cleanup_packets (false);
+
+ // Remove any unprocessed completed messages
+ if (!this->complete_.is_empty ())
+ {
+ ACE_GUARD (TAO_SYNCH_MUTEX, complete_guard, this->complete_lock_);
+ while (!this->complete_.is_empty ())
+ {
+ TAO_PG::UIPMC_Recv_Packet *packet = 0;
+ this->complete_.dequeue_head (packet);
+ delete packet;
+ }
+ }
}
void
@@ -54,7 +66,7 @@ TAO_UIPMC_Mcast_Transport::cleanup_packets (bool expired_only)
else
{
for (Packets_Map::iterator iter = this->incomplete_.begin ();
- iter != this->incomplete_.end ();)
+ !iter.done ();)
{
// Move forward iter because what it was pointing to could be
// unbound at the end of the loop leaving the iterator pointing
diff --git a/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp b/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp
index e43cfaffc26..9c743e8f007 100644
--- a/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp
+++ b/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.cpp
@@ -118,26 +118,16 @@ TAO::Any_Dual_Impl_T<T>::extract (const CORBA::Any & any,
if (narrow_impl == 0)
{
- return false;
+ TAO_OutputCDR ocdr;
+ impl->marshal_value (ocdr);
+ TAO_InputCDR icdr (ocdr);
+ return replace (icdr, any, destructor, any_tc, _tao_elem);
}
_tao_elem = narrow_impl->value_;
return true;
}
- T *empty_value = 0;
- ACE_NEW_RETURN (empty_value,
- T,
- false);
- TAO::Any_Dual_Impl_T<T> *replacement = 0;
- ACE_NEW_RETURN (replacement,
- TAO::Any_Dual_Impl_T<T> (destructor,
- any_tc,
- empty_value),
- false);
-
- auto_ptr<TAO::Any_Dual_Impl_T<T> > replacement_safety (replacement);
-
// We know this will work since the unencoded case is covered above.
TAO::Unknown_IDL_Type * const unk =
dynamic_cast<TAO::Unknown_IDL_Type *> (impl);
@@ -149,19 +139,7 @@ TAO::Any_Dual_Impl_T<T>::extract (const CORBA::Any & any,
// shared by another Any. This copies the state, not the buffer.
TAO_InputCDR for_reading (unk->_tao_get_cdr ());
- CORBA::Boolean const good_decode =
- replacement->demarshal_value (for_reading);
-
- if (good_decode)
- {
- _tao_elem = replacement->value_;
- const_cast<CORBA::Any &> (any).replace (replacement);
- replacement_safety.release ();
- return true;
- }
-
- // Duplicated by Any_Impl base class constructor.
- ::CORBA::release (any_tc);
+ return replace (for_reading, any, destructor, any_tc, _tao_elem);
}
catch (const ::CORBA::Exception&)
{
@@ -172,6 +150,42 @@ TAO::Any_Dual_Impl_T<T>::extract (const CORBA::Any & any,
template<typename T>
CORBA::Boolean
+TAO::Any_Dual_Impl_T<T>::replace (TAO_InputCDR &cdr,
+ const CORBA::Any &any,
+ _tao_destructor destructor,
+ CORBA::TypeCode_ptr any_tc,
+ const T *&_tao_elem)
+{
+ T *empty_value = 0;
+ ACE_NEW_RETURN (empty_value,
+ T,
+ false);
+ TAO::Any_Dual_Impl_T<T> *replacement = 0;
+ ACE_NEW_RETURN (replacement,
+ TAO::Any_Dual_Impl_T<T> (destructor,
+ any_tc,
+ empty_value),
+ false);
+
+ auto_ptr<TAO::Any_Dual_Impl_T<T> > replacement_safety (replacement);
+
+ CORBA::Boolean const good_decode = replacement->demarshal_value (cdr);
+
+ if (good_decode)
+ {
+ _tao_elem = replacement->value_;
+ const_cast<CORBA::Any &> (any).replace (replacement);
+ replacement_safety.release ();
+ return true;
+ }
+
+ // Duplicated by Any_Impl base class constructor.
+ ::CORBA::release (any_tc);
+ return false;
+}
+
+template<typename T>
+CORBA::Boolean
TAO::Any_Dual_Impl_T<T>::marshal_value (TAO_OutputCDR &cdr)
{
return (cdr << *this->value_);
diff --git a/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.h b/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.h
index be40f181aed..4a6c8f24125 100644
--- a/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.h
+++ b/TAO/tao/AnyTypeCode/Any_Dual_Impl_T.h
@@ -73,6 +73,13 @@ namespace TAO
void value (const T &);
T * value_;
+
+ private:
+ static CORBA::Boolean replace (TAO_InputCDR &,
+ const CORBA::Any &,
+ _tao_destructor,
+ CORBA::TypeCode_ptr,
+ const T *&);
};
}
diff --git a/TAO/tao/GIOP_Message_Base.cpp b/TAO/tao/GIOP_Message_Base.cpp
index f4ddd3473d5..75191cd5645 100644
--- a/TAO/tao/GIOP_Message_Base.cpp
+++ b/TAO/tao/GIOP_Message_Base.cpp
@@ -679,8 +679,21 @@ TAO_GIOP_Message_Base::process_request_message (TAO_Transport *transport,
#if defined (TAO_HAS_ZIOP) && TAO_HAS_ZIOP ==1
if (qd->state ().compressed ())
{
+ ACE_Data_Block *const orig_db = db;
if (!this->decompress (&db, *qd, rd_pos, wr_pos))
return -1;
+ if (orig_db != db)
+ {
+ // Since the decompression has replaced our original datablock,
+ // if we were supposed to delete it, do so now.
+ if (ACE_BIT_DISABLED (flg, ACE_Message_Block::DONT_DELETE))
+ static_cast<void> (orig_db->release ());
+ else
+ // and make sure that the new datablock is always deleted by
+ // the upcomming input_cdr going out of scope as we have been
+ // given ownership of it.
+ ACE_CLR_BITS (flg, ACE_Message_Block::DONT_DELETE);
+ }
}
#endif
if (TAO_debug_level > 9)
@@ -794,8 +807,21 @@ TAO_GIOP_Message_Base::process_reply_message (
#if defined (TAO_HAS_ZIOP) && TAO_HAS_ZIOP ==1
if (qd->state ().compressed ())
{
+ ACE_Data_Block *const orig_db = db;
if (!this->decompress (&db, *qd, rd_pos, wr_pos))
return -1;
+ if (orig_db != db)
+ {
+ // Since the decompression has replaced our original datablock,
+ // if we were supposed to delete it, do so now.
+ if (ACE_BIT_DISABLED (flg, ACE_Message_Block::DONT_DELETE))
+ static_cast<void> (orig_db->release ());
+ else
+ // and make sure that the new datablock is always deleted by
+ // the upcomming input_cdr going out of scope as we have been
+ // given ownership of it.
+ ACE_CLR_BITS (flg, ACE_Message_Block::DONT_DELETE);
+ }
}
#endif
if (TAO_debug_level > 9)
diff --git a/TAO/tests/Bug_4082_Regression/run_test.pl b/TAO/tests/Bug_4082_Regression/run_test.pl
new file mode 100755
index 00000000000..07d3e7640cd
--- /dev/null
+++ b/TAO/tests/Bug_4082_Regression/run_test.pl
@@ -0,0 +1,20 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib "$ENV{ACE_ROOT}/bin";
+use PerlACE::TestTarget;
+use strict;
+
+my $target = PerlACE::TestTarget::create_target(1)
+ or die "Create target failed\n";
+my $test = $target->CreateProcess("client");
+my $result = $test->SpawnWaitKill($target->ProcessStartWaitInterval());
+if ($result != 0) {
+ print STDERR "ERROR: test returned $result\n";
+ exit 1;
+}
+exit 0;