Aha! Alex and I found out the problem.
The issue is that the MpResourceTopology::ResourceDef and
MpResourceTopology::ConnectionDef structs were storing references...

If you think about it -- these structs are initialized from a static
array-of-structs initializer, where the UtlStrings are implicitly
constructed from constant strings... so, the UtlString is constructed, the
struct is constructed - and stores reference to the string, then, after the
struct is constructed, UtlString goes out of scope, and gets implicitly
deleted -- now struct holds invalid reference...

I've fixed this now in rev 11093 -- and verified that
sipXmediaAdapterLibTest unit tests run

On Fri, Dec 12, 2008 at 12:34 AM, Paul Whitfield
<[email protected]>wrote:

> >> How do I run the Topology graph instead of the CallFlowGraph?
> >
> > Basically you should define following preprocessor defines for
> > sipXmediaAdapterLib:
> > DISABLE_DEFAULT_PHONE_MEDIA_INTERFACE_FACTORY
> > ENABLE_TOPOLOGY_FLOWGRAPH_INTERFACE_FACTORY
> >
> > If you use Linux, then it can be done by passing --enable-topology-graph
> > option to configure. Under Windows you have to change project's
> > configuration. Btw, in VS6, VS2003 and VS2005 Debug builds
> > Topology is enabled by default now. We should do the same
> > for Release configurations too to avoid confusion.
> >
>
>
> When compiling with VS2008, with the definitions above, the
> library crashes on initialisation.
>
> After much investigation today, it appears to be an issue
> with how VS2008 initialises static classes.
>
> Specifically in
>
> spiXmediaAdaptorLib/CpTopologyGraphFactoryImpl.cpp,
>
> initalTopologyResources[] is set to a correct default values,
> however, VS2008 appears to create temporary objects (on the stack)
> and point to them.
>
> By the time initialTopologyResourcse is used they are out of
> scope and they contain rubbish!. The same is true for the
> other similarly initialised static classes/struct in this
> file/mode.
>
> In the file MpResourceTopology.h there is a
> #if defined(_MSC_VER) && ( _MSC_VER <= 1200 )
> that prevents this on Visual Studio 6.0.
>
> However, it appears that it is also broken for VS2008..
>
> As a test, I modified this file so that
> there where no statically initialised UtlString
> objects.
>
> This fixed the initialisation issues, well at least the code started up
> without crashing.
>
> For now I have gone back to using the MpCallFlowGraph rather
> than MpTopology.
>
> So for the time being it appears that the Topology code is broken on
> VS2008. :-(
>
> NOTE: I am not expecting anyone to fix this, I just want to make
> sure that everyone knows about it to save anyone else having to
> figure it out!
>
> Regards
>
>
> Paul
> _______________________________________________
> sipxtapi-dev mailing list
> [email protected]
> List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/
>



-- 
Keith Kyzivat

SIPez LLC.
SIP VoIP, IM and Presence Consulting
http://www.SIPez.com
tel: +1 (617) 273-4000
_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/

Reply via email to