[omniORB] Reference count with tie implementation

R.vd.Leek@fokkerspace.nl R.vd.Leek@fokkerspace.nl
Wed, 13 Sep 2000 14:47:34 +0200


Hate to bother you with this general CORBA question, hoping for some
help though...

-- I've got the following server implementation:

class MiTest_i {
public:
        inline MiTest_i() { cout << "object created" << endl; }
        virtual ~MiTest_i() { cout << "object deleted" << endl; }
        virtual void ping () {};
};

struct Node {
        Node (MiTest_ptr ref, Node* n) : objref(ref), next(n) {};
        MiTest_ptr objref;
        Node* next;
};

class MiTestFactory_i {
public:
        inline MiTestFactory_i() : head(NULL) {}
        virtual ~MiTestFactory_i() {}

        virtual MiTest_ptr factorize () {
                MiTest_i* mi_test_impl = new MiTest_i();
                POA_MiTest_tie<MiTest_i>* mi_test =
                        new POA_MiTest_tie<MiTest_i>(mi_test_impl);
                head = new Node(mi_test->_this(), head);
                return mi_test->_this();
        }

        virtual void destroyAllObjects () {
                while (head != NULL) {
                        CORBA::release(head->objref);
                        Node *tmp = head;
                        head = head->next;
                        delete tmp;
                }
        }
private:
        Node* head;
};

-- and the following client implementation:

                MiTestFactory_var MiTestFactoryRef =
                        MiTestFactory::_narrow(obj);

                cout << "creating " << NR_SERVER_OBJECTS <<
                        " server objects..." << endl;
                MiTest_var servers[NR_SERVER_OBJECTS];
                for (int i=0; i<NR_SERVER_OBJECTS; i++)
                        servers[i] = MiTestFactoryRef->factorize();
                // ....
		    
                MiTestFactoryRef->destroyAllObjects();

-- 

The problem is that a release in the destroyAllObjects() method doesn't
delete the MiTest objects (the destructor isn't called) and thus my
application is leaking... 

Any help is appreciated, TIA

rob.
--
Rob van der Leek
Fokker Space b.v.
Remote Sensing Group
e-mail: r.vd.leek@fokkerspace.nl
tel.: +31-(0)71-5245531