[omniORB] Error deleting the server objects and closing server

Vivek Aggarwal vaggarwal@gatwick.westerngeco.slb.com
Mon, 29 Apr 2002 17:34:55 +0100



--------------44D226B5E86DBFAB46B3A9B2
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi,

I am using OmniORB 3.0.4 for writing a corba server.
To manage memory leakages, I am deleting the server side objects when
the client side object is deleted.
I am using POA-Tie approach.
I have maintained an id number corresponding to each server object
created and its Tie object.
I extract the id of the server object at the client side, make the
client side reference to nil (to make sure that no object at client is
connected with the server object) and send a request to the server to
delete the object corresponding to that id.
At server side, I retrieve the tie object corresponding to the servant
object with input id and delete the tie object (which in turn deletes
the implementation object.)
On server side, there is a top level container class A which publishes
itself with the IOR. Rest of the classes B.. on server side are
contained in the object of class A.

To delete the objects of class B, I maintain the id'd of all the objects
of class B and their Tie objects.
-    I extract the id of the object of class B at client side,
-    make its reference at client side to nil
-    Send request to server object of A to delete the object of B with
input id.
-    At server, extract the tie object correspond to the object with
input id.
-    delete the tie object.

When the server object is deleted, I got an error message that
omniORB: ERROR -- A servant has been deleted that is still activated.
      id: root<7>

I don't expect this error, as I have already made its corresponding
reference object at the server side to nil.

Do you think, I need to do something else/or more to delete any server
side object.

Also,
I am closing the server from the client itself.

My client send a request to the server to close, once it is done.
After receving the close request, I call the shutdown() function of the
ORB.
At this point, I get an error message at the console:

omniORB: Assertion failed.  This indicates a bug in the application
using
omniORB, or maybe in omniORB itself. e.g. using the ORB after it has
been shut down.
 file: ../omniServant.cc
 line: 199
 info: *p
Run-time exception error; current exception: fatalException
        No handler for exception.

There is no call after this function which uses the orb. In fact it does
nothing after that.
I am not even calling the destroy function of orb, which I think, I
should.
If I call the destroy of ORB after that, it crashes.
I tried using destroy only, when the server receives the close request,
but that didn't work.

Can I get some help in this issue too.

Regards

Vivek

--------------44D226B5E86DBFAB46B3A9B2
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
Hi,
<p>I am using OmniORB 3.0.4 for writing a corba server.
<br>To manage memory leakages, I am deleting the server side objects when
the client side object is deleted.
<br>I am using POA-Tie approach.
<br>I have maintained an id number corresponding to each server object
created and its Tie object.
<br>I extract the id of the server object at the client side, make the
client side reference to nil (to make sure that no object at client is
connected with the server object) and send a request to the server to delete
the object corresponding to that id.
<br>At server side, I retrieve the tie object corresponding to the servant
object with input id and delete the tie object (which in turn deletes the
implementation object.)
<br>On server side, there is a top level container class A which publishes
itself with the IOR. Rest of the classes B.. on server side are contained
in the object of class A.
<p>To delete the objects of class B, I maintain the id'd of all the objects
of class B and their Tie objects.
<br>-&nbsp;&nbsp;&nbsp; I extract the id of the object of class B at client
side,
<br>-&nbsp;&nbsp;&nbsp; make its reference at client side to nil
<br>-&nbsp;&nbsp;&nbsp; Send request to server object of A to delete the
object of B with input id.
<br>-&nbsp;&nbsp;&nbsp; At server, extract the tie object correspond to
the object with input id.
<br>-&nbsp;&nbsp;&nbsp; delete the tie object.
<p>When the server object is deleted, I got an error message that
<br>omniORB: ERROR -- A servant has been deleted that is still activated.
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id: root&lt;7>
<p>I don't expect this error, as I have already made its corresponding
reference object at the server side to nil.
<p>Do you think, I need to do something else/or more to delete any server
side object.
<p><b>Also</b>,
<br>I&nbsp;am closing the server from the client itself.
<p>My client send a request to the server to close, once it is done.
<br>After receving the close request, I call the shutdown() function of
the ORB.
<br>At this point, I get an error message at the console:
<p>omniORB: Assertion failed.&nbsp; This indicates a bug in the application
using
<br>omniORB, or maybe in omniORB itself. e.g. using the ORB after it has
<br>been shut down.
<br>&nbsp;file: ../omniServant.cc
<br>&nbsp;line: 199
<br>&nbsp;info: *p
<br>Run-time exception error; current exception: fatalException
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No handler for exception.
<p>There is no call after this function which uses the orb. In fact it
does nothing after that.
<br>I am not even calling the destroy function of orb, which I think, I
should.
<br>If I call the destroy of ORB after that, it crashes.
<br>I tried using destroy only, when the server receives the close request,
but that didn't work.
<p>Can I get some help in this issue too.
<p>Regards
<p>Vivek</html>

--------------44D226B5E86DBFAB46B3A9B2--