< Previous by Date Date Index Next by Date >
  Thread Index  

[reSIProcate] RE: exception thrown in lock.cxx line 28


Hmm - not really sure - must have something to do with order of creation of the 
global objects.  The resip code creates a number of objects at startup in 
global scope.  Or maybe something to do with the logger initialization.   You 
will probably have to look at a stack trace of the exception to figure out 
exactly what is happening.

> -----Original Message-----
> From: maodonghu [mailto:hhmmdd@xxxxxxx]
> Sent: Wednesday, November 02, 2005 9:48 PM
> To: resiprocate-devel; Scott Godin
> Subject: exception thrown in lock.cxx line 28
> 
> Hi,
> 
> the exception thrown in lock.cxx line 28: myLockable.lock();
> 
> follow is the whole code:
> 
> // sip001.cpp
> //
> 
> #include <stdio.h>
> #include <sstream>
> #include <time.h>
> 
> #include "resip/stack/SipStack.hxx"
> #include "resip/stack/SdpContents.hxx"
> #include "resip/stack/SipMessage.hxx"
> #include "resip/stack/ShutdownMessage.hxx"
> 
> #include "resip/dum/ClientAuthManager.hxx"
> #include "resip/dum/ClientRegistration.hxx"
> #include "resip/dum/DialogUsageManager.hxx"
> #include "resip/dum/MasterProfile.hxx"
> #include "resip/dum/RegistrationHandler.hxx"
> #include "resip/dum/KeepAliveManager.hxx"
> #include "resip/dum/ClientInviteSession.hxx"
> #include "resip/dum/DumShutdownHandler.hxx"
> #include "resip/dum/InviteSessionHandler.hxx"
> #include "resip/dum/MasterProfile.hxx"
> #include "resip/dum/ServerInviteSession.hxx"
> #include "resip/dum/ServerOutOfDialogReq.hxx"
> #include "resip/dum/OutOfDialogHandler.hxx"
> #include "resip/dum/AppDialog.hxx"
> #include "resip/dum/AppDialogSet.hxx"
> #include "resip/dum/AppDialogSetFactory.hxx"
> 
> #include "rutil/Log.hxx"
> #include "rutil/Logger.hxx"
> #include "rutil/Subsystem.hxx"
> #include "rutil/Random.hxx"
> 
> using namespace resip;
> using namespace std;
> 
> // Generic InviteSessionHandler
> class TestInviteSessionHandler : public InviteSessionHandler, public
> ClientRegistrationHandler, public OutOfDialogHandler
> {
>    public:
>       Data name;
>       bool registered;
>       ClientRegistrationHandle registerHandle;
> 
>       TestInviteSessionHandler(const Data& n) : name(n), registered(false)
>       {
>       }
> 
>       virtual ~TestInviteSessionHandler()
>       {
>       }
> 
>       virtual void onSuccess(ClientRegistrationHandle h, const SipMessage&
> response)
>       {
>          registerHandle = h;
>          assert(registerHandle.isValid());
>          cout << name << ": ClientRegistration-onSuccess - " <<
> response.brief() << endl;
>          registered = true;
>       }
> 
>       virtual void onFailure(ClientRegistrationHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": ClientRegistration-onFailure - " <<
> msg.brief() << endl;
>          //throw;  // Ungracefully end
>       }
> 
>       virtual void onRemoved(ClientRegistrationHandle)
>       {
>           cout << name << ": ClientRegistration-onRemoved" << endl;
>       }
> 
>       virtual int onRequestRetry(ClientRegistrationHandle, int
> retrySeconds, const SipMessage& response)
>       {
>           cout << name << ": ClientRegistration-onRequestRetry (" <<
> retrySeconds << ") - " << response.brief() << endl;
>           return -1;
>       }
> 
>       virtual void onNewSession(ClientInviteSessionHandle,
> InviteSession::OfferAnswerType oat, const SipMessage& msg)
>       {
>          cout << name << ": ClientInviteSession-onNewSession - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onNewSession(ServerInviteSessionHandle,
> InviteSession::OfferAnswerType oat, const SipMessage& msg)
>       {
>          cout << name << ": ServerInviteSession-onNewSession - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onFailure(ClientInviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": ClientInviteSession-onFailure - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onProvisional(ClientInviteSessionHandle, const
> SipMessage& msg)
>       {
>          cout << name << ": ClientInviteSession-onProvisional - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onConnected(ClientInviteSessionHandle, const
> SipMessage& msg)
>       {
>          cout << name << ": ClientInviteSession-onConnected - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onStaleCallTimeout(ClientInviteSessionHandle handle)
>       {
>          cout << name << ": ClientInviteSession-onStaleCallTimeout" <<
> endl;
>       }
> 
>       virtual void onConnected(InviteSessionHandle, const SipMessage& msg)
>       {
>          cout << name << ": InviteSession-onConnected - " << msg.brief()
> << endl;
>       }
> 
>       virtual void onRedirected(ClientInviteSessionHandle, const
> SipMessage& msg)
>       {
>          cout << name << ": ClientInviteSession-onRedirected - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onTerminated(InviteSessionHandle,
> InviteSessionHandler::TerminatedReason reason, const SipMessage* msg)
>       {
>          cout << name << ": InviteSession-onTerminated - " << msg->brief()
> << endl;
>          assert(0); // This is overrideen in UAS and UAC specific handlers
>       }
> 
>       virtual void onAnswer(InviteSessionHandle, const SipMessage& msg,
> const SdpContents& sdp)
>       {
>          cout << name << ": InviteSession-onAnswer(SDP)" << endl;
>          //sdp->encode(cout);
>       }
> 
>       virtual void onOffer(InviteSessionHandle is, const SipMessage& msg,
> const SdpContents& sdp)
>       {
>          cout << name << ": InviteSession-onOffer(SDP)" << endl;
>          //sdp->encode(cout);
>       }
> 
>       virtual void onEarlyMedia(ClientInviteSessionHandle, const
> SipMessage& msg, const SdpContents& sdp)
>       {
>          cout << name << ": InviteSession-onEarlyMedia(SDP)" << endl;
>          //sdp->encode(cout);
>       }
> 
>       virtual void onOfferRequired(InviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": InviteSession-onOfferRequired - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onOfferRejected(InviteSessionHandle, const SipMessage*
> msg)
>       {
>          cout << name << ": InviteSession-onOfferRejected" << endl;
>       }
> 
>       virtual void onDialogModified(InviteSessionHandle,
> InviteSession::OfferAnswerType oat, const SipMessage& msg)
>       {
>          cout << name << ": InviteSession-onDialogModified - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onRefer(InviteSessionHandle, ServerSubscriptionHandle,
> const SipMessage& msg)
>       {
>          cout << name << ": InviteSession-onRefer - " << msg.brief() <<
> endl;
>       }
> 
>       virtual void onReferAccepted(InviteSessionHandle,
> ClientSubscriptionHandle, const SipMessage& msg)
>       {
>          cout << name << ": InviteSession-onReferAccepted - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onReferRejected(InviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": InviteSession-onReferRejected - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onInfo(InviteSessionHandle, const SipMessage& msg)
>       {
>          cout << name << ": InviteSession-onInfo - " << msg.brief() <<
> endl;
>       }
> 
>       virtual void onInfoSuccess(InviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": InviteSession-onInfoSuccess - " << msg.brief()
> << endl;
>       }
> 
>       virtual void onInfoFailure(InviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": InviteSession-onInfoFailure - " << msg.brief()
> << endl;
>       }
> 
>       virtual void onMessage(InviteSessionHandle, const SipMessage& msg)
>       {
>          cout << name << ": InviteSession-onMessage - " << msg.brief() <<
> endl;
>       }
> 
>       virtual void onMessageSuccess(InviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": InviteSession-onMessageSuccess - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onMessageFailure(InviteSessionHandle, const SipMessage&
> msg)
>       {
>          cout << name << ": InviteSession-onMessageFailure - " <<
> msg.brief() << endl;
>       }
> 
>       virtual void onForkDestroyed(ClientInviteSessionHandle)
>         {
>          cout << name << ": ClientInviteSession-onForkDestroyed" << endl;
>         }
> 
>       // Out-of-Dialog Callbacks
>       virtual void onSuccess(ClientOutOfDialogReqHandle, const SipMessage&
> successResponse)
>       {
>           cout << name << ": ClientOutOfDialogReq-onSuccess - " <<
> successResponse.brief() << endl;
>       }
>       virtual void onFailure(ClientOutOfDialogReqHandle, const SipMessage&
> errorResponse)
>       {
>           cout << name << ": ClientOutOfDialogReq-onFailure - " <<
> errorResponse.brief() << endl;
>       }
>       virtual void onReceivedRequest(ServerOutOfDialogReqHandle ood, const
> SipMessage& request)
>       {
>           cout << name << ": ServerOutOfDialogReq-onReceivedRequest - " <<
> request.brief() << endl;
>           // Add SDP to response here if required
>           cout << name << ": Sending 200 response to OPTIONS." << endl;
>           ood->send(ood->answerOptions());
>       }
> };
> 
> class TestUac : public TestInviteSessionHandler
> {
>    public:
>       bool done;
>       SdpContents* sdp;
>       HeaderFieldValue* hfv;
>       Data* txt;
> 
>       TestUac()
>          : TestInviteSessionHandler("UAC"),
>            done(false),
>            sdp(0),
>            hfv(0),
>            txt(0)
>       {
>          txt = new Data("v=0\r\n"
>                         "o=1900 369696545 369696545 IN IP4
> 192.168.2.15\r\n"
>                         "s=X-Lite\r\n"
>                         "c=IN IP4 192.168.2.15\r\n"
>                         "t=0 0\r\n"
>                         "m=audio 8000 RTP/AVP 8 3 98 97 101\r\n"
>                         "a=rtpmap:8 pcma/8000\r\n"
>                         "a=rtpmap:3 gsm/8000\r\n"
>                         "a=rtpmap:98 iLBC\r\n"
>                         "a=rtpmap:97 speex/8000\r\n"
>                         "a=rtpmap:101 telephone-event/8000\r\n"
>                         "a=fmtp:101 0-15\r\n");
> 
>          hfv = new HeaderFieldValue(txt->data(), txt->size());
>          Mime type("application", "sdp");
>          sdp = new SdpContents(hfv, type);
>       }
> 
>       virtual ~TestUac()
>       {
>          delete sdp;
>       }
> 
>       virtual void onOffer(InviteSessionHandle is, const SipMessage& msg,
> const SdpContents& sdp)
>       {
>          cout << name << ": InviteSession-onOffer(SDP)" << endl;
>          //sdp->encode(cout);
>          is->provideAnswer(sdp);
>       }
> 
>       virtual void onConnected(ClientInviteSessionHandle is, const
> SipMessage& msg)
>       {
>          cout << name << ": ClientInviteSession-onConnected - " <<
> msg.brief() << endl;
>          cout << "Connected now - requestingOffer from UAS" << endl;
>          is->requestOffer();
>       }
> 
>       virtual void onTerminated(InviteSessionHandle,
> InviteSessionHandler::TerminatedReason reason, const SipMessage* msg)
>       {
>          cout << name << ": InviteSession-onTerminated - " << msg->brief()
> << endl;
>          done = true;
>       }
> };
> 
> 
> SipStack sip_stack;
> int _tmain(int argc, _TCHAR* argv[])
> {
>       //Log::initialize(Log::File, Log::Stack, argv[0], "sip.log");
> 
>       //SipStack sip_stack;
>       DialogUsageManager* dum = new DialogUsageManager( sip_stack );
>       dum->addTransport( UDP, 12345 );
> 
>       SharedPtr<MasterProfile> profile( new MasterProfile );
>       auto_ptr<ClientAuthManager> uaAuth( new ClientAuthManager );
>       auto_ptr<KeepAliveManager> keepAlive(new KeepAliveManager);
>       dum->setMasterProfile( profile );
>       dum->setClientAuthManager( uaAuth );
>       dum->setKeepAliveManager(keepAlive);
> 
>       TestUac uac;
>       dum->setClientRegistrationHandler( &uac );
>       dum->setInviteSessionHandler( &uac );
>       dum->addOutOfDialogHandler( OPTIONS, &uac );
> 
>       //auto_ptr<AppDialogSetFactory> ua_dsf(new testAppDialogSetFactory);
>       //dum->setAppDialogSetFactory(ua_dsf);
> 
>       NameAddr User = NameAddr( "sip:2201@xxxxxxxxxxxxxx" );
>       //dum->getMasterProfile()->setOutboundProxy(
> Uri("sip:192.168.101.85:5060") );
>       dum->getMasterProfile()->setDefaultFrom( User );
>       dum->getMasterProfile()->setDefaultRegistrationTime(70);
>       dum->getMasterProfile()->setDigestCredential(User.uri().host(),
> User.uri().user(), "");
> 
>       SipMessage& regMessage = dum->makeRegistration( User );
> 
>       cout << "Sending register for UA" << endl << endl << regMessage ;
>       dum->send( regMessage );
> 
>       bool done = false;
>       while ( ! done )
>       {
>               resip::FdSet fdset;
> 
>               sip_stack.buildFdSet( fdset );
>               int err = fdset.selectMilliSeconds(
> sip_stack.getTimeTillNextProcessMS() );
>               assert ( err != -1 );
> 
>               sip_stack.process( fdset );
>               while( dum->process() );
>       }
> 
>       return 0;
> }
> 
> 
> 
> ---------- Forwarded message ----------
> From: Scott Godin <slgodin@xxxxxxxxxxxx>
> Date: 2005-11-3 上午10:27
> Subject: RE: [reSIProcate] (no subject)
> To: maodonghu <hhmmdd@xxxxxxx>, resiprocate-devel <resiprocate-
> devel@xxxxxxxxxxxxxxxxxxx >
> 
> Sounds strange - where is the exception thrown?
> 
> -----Original Message-----
> From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx [mailto:resiprocate-
> devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of maodonghu
> Sent: Wednesday, November 02, 2005 8:24 PM
> To: resiprocate-devel
> Subject: [reSIProcate] (no subject)
> 
> Hi,
> 
> I am a fresh man on reSIProcate, now I encounter a problem in my program.
> if the program written like this, it is good for work:
> 
> //---------------------------------------------------
> int _tmain(int argc, _TCHAR* argv[])
> {
>        //Log::initialize(Log::Cout, Log::Stack, argv[0]);
> 
>        SipStack sip_stack;
>        DialogUsageManager* dum = new DialogUsageManager( sip_stack );
>        dum->addTransport( UDP, 12345 );
> 
> 
> but if written like this, it will throw a exception:
> 
> //----------------------------------------------------
> SipStack sip_stack;
> int _tmain(int argc, _TCHAR* argv[])
> {
>        //Log::initialize(Log::Cout, Log::Stack, argv[0]);
> 
> 
>        DialogUsageManager* dum = new DialogUsageManager( sip_stack );
>        dum->addTransport( UDP, 12345 );
>        ...
> 
> I dont know why the sip_stack must be local ?
> 
> maodonghu
> hhmmdd@xxxxxxx
> 2005-11-03
> 
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
> 
> 
> 
>         maodonghu
>         hhmmdd@xxxxxxx
>           2005-11-03