[muscle] Updating from 3.30 to 5.22

  • From: Raymond Dahlberg <rd@xxxxxxxxxxx>
  • To: muscle@xxxxxxxxxxxxx
  • Date: Wed, 7 Apr 2010 13:30:11 +0200

Hi Muscle list!

We have been using Muscle for several years in our own network library. The
code has been pretty stable and unchanged for some time, but now we want to
do some changes, and decided it was time to upgrade Muscle too.

I have successfully adapted our code to the source incompatible changes, and
everything builds, and the first tests show that basic functionality works.
Clients connect to the server, and the can communicate. So far so good :)

But it seems something is changed in the cleanup code, since I always get a
MUSCLE assertion failure when the last muscle application exits. It also
outputs on the command line:

[C 04/07 13:20:22] ~ObjectPool 004FB268:  slab 00A89CD0 is still in use when
we destroy it!
[C 04/07 13:20:22] ASSERTION FAILED: (\muscle\util/ObjectPool.h:125)
ObjectPool destroyed while its objects were still in use (Is
a CompleteSetupSystem object declared at the top of main()?)

I understand that one must have a CompleteSetupSystem on top of main, but
this has been there all the time (not changed during muscle upgrade). For
example a little test server app where this is happening has this in main:

int main( int argc, char** argv )
{
    // Initialize NetBorealis.
    SNbSetupSystem ss;


Where SNbSetupSystem is a singleton with this constructor:

    SNbSetupSystem::SNbSetupSystem( )
        : m_CssPtr( 0 ),
        _serverExitedSignalHandle( 0 )
    {
        if ( m_CssPtr == 0 )
        {
            try {
                m_CssPtr = new CompleteSetupSystem( );
            } catch ( bad_alloc& ) { fatalError( "FATAL ERROR: Out of memory
(%s:%d).\n", __FILE__, __LINE__ ); }
        }
        _serverExitedSignalHandle = CreateEvent( 0, 0, 0, 0 );
    }

Any hints on this?

Regards,
Raymond

Other related posts:

  • » [muscle] Updating from 3.30 to 5.22 - Raymond Dahlberg