summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbala <balanatarajan@users.noreply.github.com>2004-11-16 17:41:18 +0000
committerbala <balanatarajan@users.noreply.github.com>2004-11-16 17:41:18 +0000
commitf557331bec53ba9d87d9d60e741388140806c669 (patch)
tree7cea80cf4707a0fe831bcd47b60b7adf8d899216
parentfa41fe05c58876a661c3d5f29baa0f39cab3e37f (diff)
downloadATCD-f557331bec53ba9d87d9d60e741388140806c669.tar.gz
ChangeLogTag:Tue Nov 16 14:05:33 2004 Balachandran Natarajan <bala@dre.vanderbilt.edu>
-rw-r--r--TAO/ChangeLog34
-rw-r--r--TAO/tao/ORB_Core.cpp4
2 files changed, 32 insertions, 6 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 89f6117e772..0b09c9c727f 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,23 @@
+Tue Nov 16 14:05:33 2004 Balachandran Natarajan <bala@dre.vanderbilt.edu>
+
+ * tao/ORB_Core.cpp (run):
+
+ A simple fix for thread-per-connection. Servers could crash
+ randomly if the orb was shutdown during the upcall. The
+ thread that was in the upcall is an ORB spawned thread. When we
+ call ORB::shutdown () from the upcall thread, the main thread
+ (which is in ORB::run ()) is woken up and removed from the
+ ORB. The main thread exits from the program leaving the thread
+ shutting down the ORB in limbo. Bunch of allocations done by the
+ main thread in the service configurator and object manager are
+ all destroyed crashing the spawned thread.
+
+ This fix addresses the above problem by making the thread in
+ ORB::run () wait on Thread_Manager::wait (), if the ORB is
+ shutting down and iff TPC is used.
+
+ Thanks to Carlos O'Ryan for bringing this to my notice.
+
Tue Nov 16 09:45:26 2004 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/be/be_visitor_traits.cpp:
@@ -37,10 +57,10 @@ Tue Nov 16 13:04:12 UTC 2004 Martin Corino <mcorino@remedy.nl>
* tao/Messaging/MessagingC.cpp:
* tao/PortableServer/PortableServerA.cpp:
* tao/IORManipulation/IORA.cpp:
- Fixed missing includes for f.i. VxWorks builds because of IDL compiler
- bug in case of special build configs.
- IDL compiler has also been fixed so files will be correctly regenerated
- next time (when POA refactoring is complete).
+ Fixed missing includes for f.i. VxWorks builds because of IDL
+ compiler bug in case of special build configs. IDL compiler has
+ also been fixed so files will be correctly regenerated next time
+ (when POA refactoring is complete).
* tao/Any.cpp:
* tao/Codeset_Manager.cpp:
@@ -61,10 +81,12 @@ Tue Nov 16 13:04:12 UTC 2004 Martin Corino <mcorino@remedy.nl>
* tests/IORManipulation/IORTest.cpp:
* tests/POA/Policies/Policies.cpp:
* tests/Smart_Proxies/Collocation/Smart_Proxy_Impl.cpp:
- Fixed missing includes and iostream incompatibilities for VxWorks builds.
+ Fixed missing includes and iostream incompatibilities for
+ VxWorks builds.
* tests/Servant_To_Reference_Test/Servant_to_Reference.mpc:
- Fixed double link of Test_i.o because .h was added to Source_Files.
+ Fixed double link of Test_i.o because .h was added to
+ Source_Files.
Mon Nov 15 15:06:12 UTC 2004 Johnny Willemsen <jwillemsen@remedy.nl>
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 444ee0e1e7f..f769ff98941 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -1925,6 +1925,10 @@ TAO_ORB_Core::run (ACE_Time_Value *tv,
// Otherwise just continue..
}
+ if (this->has_shutdown () == 1 &&
+ this->server_factory_->activate_server_connections ())
+ this->tm_.wait ();
+
if (TAO_debug_level > 2)
{
ACE_DEBUG ((LM_DEBUG,