Carsten Neumann wrote:

> the reference count is stored in the pointed-to object ...
...
> some ideas to debug this further:
> - you can access the reference count of an object with 
> FieldContainer::getRefCount()


I've been having a similar issue with a MultiDisplayWindowRefPtr, so I
followed your advice:

In my "open server" function:

    // local variable
    OSG::MultiDisplayWindow * multi_display_window
      = static_cast<OSG::MultiDisplayWindow *> (
          m_ClusterServer->getClusterWindow());
  
    if (multi_display_window) std::cerr
      << "multi_display_window->getRefCount() = "
      << multi_display_window->getRefCount() << std::endl;

That prints "2" already.  A little surprising, but OK.

    // copy to class data variable
    m_MultiDisplayWindow = multi_display_window;
    if (m_MultiDisplayWindow) std::cerr
      << "m_MultiDisplayWindow->getRefCount() = "
      << m_MultiDisplayWindow->getRefCount() << std::endl;

That prints "3".  OK.

In my "close" function:

    // test class data variable
    if (m_MultiDisplayWindow) std::cerr
      << "m_MultiDisplayWindow->getRefCount() = "
      << m_MultiDisplayWindow->getRefCount() << std::endl;

That still prints "3".  OK.

    // delete the ClusterServer
    if (m_ClusterServer)
    {
      m_ClusterServer->stop ();
      delete m_ClusterServer;
      m_ClusterServer = NULL;
    }

    // test class data variable
    if (m_MultiDisplayWindow) std::cerr
      << "m_MultiDisplayWindow->getRefCount() = "
      << m_MultiDisplayWindow->getRefCount() << std::endl;

That already prints "0", even though I have not yet destroyed or reset
m_MultiDisplayWindow.  I expected it to be "1".

    m_MultiDisplayWindow = NULL;

The program crashes here -- I guess because the MultiDisplayWindow was
already destroyed when its reference count went to zero, and now it's
trying to destroy it again.

   * * *

My problem seems to be related to m_ClusterServer->stop ();  I notice
that the demo program does not call that before deleting the server.
If I remove that call, my program exits cleanly.

-- 

Ted


------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to