summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlabancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-01-23 23:11:05 +0000
committerlabancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-01-23 23:11:05 +0000
commitb6c7a75fde9de4b5d2cf7c6caed0f40f9ca3243d (patch)
tree002bdee152ac703460fa14060bd6dabb5b719c0e
parentec2b28b6cc71136bb5de7e4dc05e6a84f6929bed (diff)
downloadATCD-b6c7a75fde9de4b5d2cf7c6caed0f40f9ca3243d.tar.gz
Add yield call to FT_Naming fault tolerant equivalence test to avert race conditions on some platforms
-rw-r--r--TAO/OCI_RE_ChangeLog11
-rw-r--r--TAO/orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp19
-rw-r--r--TAO/utils/nslist/nslist.cpp7
3 files changed, 34 insertions, 3 deletions
diff --git a/TAO/OCI_RE_ChangeLog b/TAO/OCI_RE_ChangeLog
index 5927a944839..3fb0034120c 100644
--- a/TAO/OCI_RE_ChangeLog
+++ b/TAO/OCI_RE_ChangeLog
@@ -1,3 +1,14 @@
+Wed Jan 23 23:05:41 UTC 2013 Phillip LaBanca <labancap@ociweb.com>
+
+ * orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp:
+
+ Add yield calls to equivalence test section to avert race conditions
+ on some platforms.
+
+ * utils/nslist/nslist.cpp:
+
+ Change count argument conversion to strtoul to better match range.
+
Wed Jan 23 16:55:34 UTC 2013 Kevin Stanley <stanleyk@ociweb.com>
* orbsvcs/Naming_Service/Naming_Service.mpc:
diff --git a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp
index aae2430a94f..71aa39dcdb5 100644
--- a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp
+++ b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp
@@ -549,6 +549,7 @@ do_failover_name_test (
level1[0].id = CORBA::string_dup ("level1_context");
CosNaming::NamingContext_var level1_context;
level1_context = root_context_1->bind_new_context (level1);
+ ACE_OS::thr_yield ();
for (i=0; i<o_breadth; i++)
{
@@ -565,6 +566,7 @@ do_failover_name_test (
level1[1].id = CORBA::string_dup (wide_name);
root_context_1->bind (level1, obj1.in ());
+ ACE_OS::thr_yield ();
// See if the newly bound object is available in the
// replica
@@ -618,6 +620,7 @@ do_failover_name_test (
deep[0].id = CORBA::string_dup (deep_name);
CosNaming::NamingContext_var deep_context;
deep_context = next_context->bind_new_context (deep);
+ ACE_OS::thr_yield ();
next_context = deep_context;
}
}
@@ -641,6 +644,7 @@ do_failover_name_test (
wide[0].id = CORBA::string_dup (wide_name);
CosNaming::NamingContext_var wide_context;
wide_context = root_context_1->bind_new_context (wide);
+ ACE_OS::thr_yield ();
try {
// Check if the new context is available in the replica
@@ -690,6 +694,7 @@ do_failover_name_test (
ACE_OS::sprintf(wide_name, ACE_TEXT_ALWAYS_CHAR ("obj_%d"), o_breadth-2);
wide1[1].id = CORBA::string_dup (wide_name);
root_context_1->unbind (wide1);
+ ACE_OS::thr_yield ();
bool retried = false;
// Make sure it is gone from the replica
@@ -740,6 +745,7 @@ do_failover_name_test (
result_object->destroy();
root_context_1->unbind (wide2);
+ ACE_OS::thr_yield ();
// Remove the last context from the deep Naming Context
CosNaming::Name deep;
@@ -765,6 +771,7 @@ do_failover_name_test (
result_object->destroy();
root_context_1->unbind (deep);
+ ACE_OS::thr_yield ();
retried = false;
// Make sure it is gone from the replica
@@ -1167,6 +1174,7 @@ do_persistence_name_test (
if( false == validate_only ) {
CosNaming::NamingContext_var level1_context;
level1_context = root_context_1->bind_new_context (level1);
+ ACE_OS::thr_yield ();
}
for (i=0; i<o_breadth; i++)
@@ -1183,8 +1191,10 @@ do_persistence_name_test (
if( false == validate_only ) {
root_context_1->bind (level1, obj1.in ());
+ ACE_OS::thr_yield ();
}
+
// See if the newly bound object is available in the repository
try {
CORBA::Object_var obj1_on_replica = root_context_1->resolve (level1);
@@ -1235,6 +1245,7 @@ do_persistence_name_test (
CosNaming::NamingContext_var deep_context;
deep_context = next_context->bind_new_context (deep);
+ ACE_OS::thr_yield ();
next_context = deep_context;
}
}
@@ -1260,6 +1271,7 @@ do_persistence_name_test (
if( false == validate_only ) {
CosNaming::NamingContext_var wide_context;
wide_context = root_context_1->bind_new_context (wide);
+ ACE_OS::thr_yield ();
}
try {
@@ -1622,6 +1634,7 @@ do_equivalence_name_test (
level1[0].id = CORBA::string_dup (ACE_TEXT_ALWAYS_CHAR("level1_context"));
CosNaming::NamingContext_var level1_context;
level1_context = root_context_1->bind_new_context (level1);
+ ACE_OS::thr_yield ();
for (i=0; i<o_breadth; i++)
{
@@ -1635,6 +1648,7 @@ do_equivalence_name_test (
ACE_OS::sprintf(wide_name, ACE_TEXT_ALWAYS_CHAR ("obj_%d"), i);
level1[1].id = CORBA::string_dup (wide_name);
root_context_1->bind (level1, obj1.in ());
+ ACE_OS::thr_yield ();
// See if the newly bound object is available in the
// replica
@@ -1684,6 +1698,7 @@ do_equivalence_name_test (
deep[0].id = CORBA::string_dup (deep_name);
CosNaming::NamingContext_var deep_context;
deep_context = next_context->bind_new_context (deep);
+ ACE_OS::thr_yield ();
next_context = deep_context;
}
}
@@ -1707,6 +1722,7 @@ do_equivalence_name_test (
wide[0].id = CORBA::string_dup (wide_name);
CosNaming::NamingContext_var wide_context;
wide_context = root_context_1->bind_new_context (wide);
+ ACE_OS::thr_yield ();
try {
// Check if the new context is available in the replica
@@ -1763,6 +1779,7 @@ do_equivalence_name_test (
ACE_OS::sprintf(wide_name, ACE_TEXT_ALWAYS_CHAR ("obj_%d"), o_breadth-2);
wide1[1].id = CORBA::string_dup (wide_name);
root_context_1->unbind (wide1);
+ ACE_OS::thr_yield ();
bool retried = false;
// Make sure it is gone from the replica
@@ -1813,6 +1830,7 @@ do_equivalence_name_test (
result_object->destroy();
root_context_1->unbind (wide2);
+ ACE_OS::thr_yield ();
// Remove the last context from the deep Naming Context
CosNaming::Name deep;
@@ -1834,6 +1852,7 @@ do_equivalence_name_test (
}
result_object->destroy();
root_context_1->unbind (deep);
+ ACE_OS::thr_yield ();
retried = false;
// Make sure it is gone from the replica
diff --git a/TAO/utils/nslist/nslist.cpp b/TAO/utils/nslist/nslist.cpp
index d93bb4657b0..df69b658cf5 100644
--- a/TAO/utils/nslist/nslist.cpp
+++ b/TAO/utils/nslist/nslist.cpp
@@ -644,7 +644,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
}
else
{
- CORBA::ULong count = ACE_OS::atoi (*argv);
+ CORBA::ULong count = ACE_OS::strtoul (ACE_TEXT_ALWAYS_CHAR (*argv), 0, 10);
if (count > 0)
{
max_count = count;
@@ -655,7 +655,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
ACE_TEXT ("Error: --count requires a number")
ACE_TEXT (" greater than 0\n")));
failed = true;
- }
+ }
}
}
else
@@ -684,7 +684,8 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
ACE_TEXT (" --kindsep <character> {<name> ID/Kind separation character, default .}\n")
ACE_TEXT (" --max <number> {If given, limits displayed sub-context depth}\n")
ACE_TEXT (" --rtt <seconds> {If given, sets the relative round trip timeout policy}\n")
- ACE_TEXT (" --count <number> {If given, sets the maximum number of entries per request from the NameService}\n"),
+ ACE_TEXT (" --count <number> {If given, sets the maximum ")
+ ACE_TEXT ("number of entries per request from the NameService}\n"),
pname));
orb->destroy ();
return 1;