summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbala <balanatarajan@users.noreply.github.com>2003-10-05 04:12:53 +0000
committerbala <balanatarajan@users.noreply.github.com>2003-10-05 04:12:53 +0000
commit0e1b401e0a069c6c0b4de283f57adeac07001a49 (patch)
tree8bbd893dcd5df8dcd0457e5ff770d89d11f886ad
parent204a89923e2a2eb746e457b5c6e31d128c4aa615 (diff)
downloadATCD-0e1b401e0a069c6c0b4de283f57adeac07001a49.tar.gz
ChangeLogTag:Sat Oct 4 23:09:51 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
-rw-r--r--TAO/ChangeLog_ref11
-rw-r--r--TAO/tao/Connection_Handler.cpp11
-rw-r--r--TAO/tao/TODO8
3 files changed, 27 insertions, 3 deletions
diff --git a/TAO/ChangeLog_ref b/TAO/ChangeLog_ref
index 4c54927e993..e3f5d06a44a 100644
--- a/TAO/ChangeLog_ref
+++ b/TAO/ChangeLog_ref
@@ -1,3 +1,14 @@
+Sat Oct 4 23:09:51 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
+
+ * tao/Connection_Handler.cpp: Call
+ send_connection_closed_notification () only after the reactor
+ and the cache have been cleaned. The call in question can make
+ upcalls into the application during AMI or AMH. The upcalls can
+ then try to make a remote invocation which will use the
+ transport from the cache or the handler from the reactor. Both
+ of them are bad and they lead to deadlocks. This should fix BUG
+ 1482 properly.
+
Wed Oct 1 10:57:12 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/be/be_interface.cpp:
diff --git a/TAO/tao/Connection_Handler.cpp b/TAO/tao/Connection_Handler.cpp
index b13edd7147b..ca2fb063038 100644
--- a/TAO/tao/Connection_Handler.cpp
+++ b/TAO/tao/Connection_Handler.cpp
@@ -247,10 +247,9 @@ TAO_Connection_Handler::handle_input_eh (
int
TAO_Connection_Handler::close_connection_eh (ACE_Event_Handler *eh)
{
- this->transport ()->send_connection_closed_notifications ();
-
// Save the ID for debugging messages
ACE_HANDLE handle = eh->get_handle ();
+
size_t id = this->transport ()->id ();
if (TAO_debug_level)
{
@@ -259,6 +258,7 @@ TAO_Connection_Handler::close_connection_eh (ACE_Event_Handler *eh)
"close_connection, purging entry from cache\n",
handle));
}
+
this->transport ()->purge_entry ();
// @@ This seems silly, but if we have no reason to be in the
@@ -326,6 +326,13 @@ TAO_Connection_Handler::close_connection_eh (ACE_Event_Handler *eh)
this->transport ()->wait_strategy ()->is_registered (0);
}
+ // This call should be made only after the cache and reactor are
+ // cleaned up. This call can make upcalls to the application which
+ // in turn can make remote calls (Bug 1551 and Bug 1482). The remote
+ // calls from the application can try to use this handler from the
+ // cache or from the reactor. So clean them up before this is
+ // called.
+ this->transport ()->send_connection_closed_notifications ();
this->state_changed (TAO_LF_Event::LFS_CONNECTION_CLOSED);
if (TAO_debug_level)
diff --git a/TAO/tao/TODO b/TAO/tao/TODO
index 95552c9dc5d..a177fe8d5b7 100644
--- a/TAO/tao/TODO
+++ b/TAO/tao/TODO
@@ -46,4 +46,10 @@
. FTCORBA and service_comm_raise_failure
-. DII and oneways \ No newline at end of file
+. DII and oneways
+
+. test non-gperf generated code
+
+. test direct collocation generated code
+
+. test Collocation_Opportunities after talking to Irfan \ No newline at end of file