diff options
author | labancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-01-23 23:11:05 +0000 |
---|---|---|
committer | labancap <labancap@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-01-23 23:11:05 +0000 |
commit | b6c7a75fde9de4b5d2cf7c6caed0f40f9ca3243d (patch) | |
tree | 002bdee152ac703460fa14060bd6dabb5b719c0e | |
parent | ec2b28b6cc71136bb5de7e4dc05e6a84f6929bed (diff) | |
download | ATCD-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_ChangeLog | 11 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/FT_Naming/FaultTolerant/client.cpp | 19 | ||||
-rw-r--r-- | TAO/utils/nslist/nslist.cpp | 7 |
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; |