r3238 - in trunk/libminisip: include/libminisip include/libminisip/conference include/libminisip/gui include/libminisip/sip source source/sip

erik at minisip.org erik at minisip.org
Thu Mar 8 05:33:06 CET 2007


Author: erik
Date: 2007-03-08 05:33:05 +0100 (Thu, 08 Mar 2007)
New Revision: 3238

Modified:
   trunk/libminisip/include/libminisip/Minisip.h
   trunk/libminisip/include/libminisip/conference/ConfMessageRouter.h
   trunk/libminisip/include/libminisip/gui/Gui.h
   trunk/libminisip/include/libminisip/sip/SipSoftPhoneConfiguration.h
   trunk/libminisip/source/Minisip.cxx
   trunk/libminisip/source/sip/SipSoftPhoneConfiguration.cxx
Log:

 * libminisip: Break reference loops in libminisip.



Modified: trunk/libminisip/include/libminisip/Minisip.h
===================================================================
--- trunk/libminisip/include/libminisip/Minisip.h	2007-03-08 04:27:01 UTC (rev 3237)
+++ trunk/libminisip/include/libminisip/Minisip.h	2007-03-08 04:33:05 UTC (rev 3238)
@@ -27,7 +27,30 @@
 			confPath = c;
 		}
 
+
+		/**
+		 * Tells minisip that it better prepare to be shut down.
+		 */
+		int stop();
+
+#if 0
+		/**
+		 * Tell the internal worker threads to stop execution.
+		 */
+		int kill();
+#endif 
+
+		/**
+		 * Wait for internal worker threads to exit (this is 
+		 * normally called after "kill").
+		 */
+		int join();
+
+		/**
+		 * equal to stop() followed by kill and join()
+		 */
 		int exit();
+
 		int startSip();
 		int runGui();
 

Modified: trunk/libminisip/include/libminisip/conference/ConfMessageRouter.h
===================================================================
--- trunk/libminisip/include/libminisip/conference/ConfMessageRouter.h	2007-03-08 04:27:01 UTC (rev 3237)
+++ trunk/libminisip/include/libminisip/conference/ConfMessageRouter.h	2007-03-08 04:33:05 UTC (rev 3238)
@@ -33,8 +33,9 @@
 #include<libminisip/gui/Gui.h>
 #include<libminisip/conference/ConferenceControl.h> 
 #include<libminisip/conference/ConfCallback.h>
-#include<libminisip/sip/SipSoftPhoneConfiguration.h>
 
+class Gui;
+
 class LIBMINISIP_API ConfMessageRouter: 	//public SipCallback, 
 			//public GuiCallback, 
 			public ConfCallback, public CommandReceiver{

Modified: trunk/libminisip/include/libminisip/gui/Gui.h
===================================================================
--- trunk/libminisip/include/libminisip/gui/Gui.h	2007-03-08 04:27:01 UTC (rev 3237)
+++ trunk/libminisip/include/libminisip/gui/Gui.h	2007-03-08 04:33:05 UTC (rev 3238)
@@ -30,6 +30,7 @@
 #include<libmutil/CommandString.h>
 #include<libmutil/Thread.h>
 #include<libmutil/MessageRouter.h>
+#include<libminisip/conference/ConfMessageRouter.h>
 
 #include<libminisip/gui/LogEntry.h>
 

Modified: trunk/libminisip/include/libminisip/sip/SipSoftPhoneConfiguration.h
===================================================================
--- trunk/libminisip/include/libminisip/sip/SipSoftPhoneConfiguration.h	2007-03-08 04:27:01 UTC (rev 3237)
+++ trunk/libminisip/include/libminisip/sip/SipSoftPhoneConfiguration.h	2007-03-08 04:33:05 UTC (rev 3238)
@@ -52,6 +52,7 @@
 class Socket;
 class SoundIO;
 class PhoneBook;
+class ConfBackend;
 //FIXME: XXX Deep copy needed for for example psk
 
 

Modified: trunk/libminisip/source/Minisip.cxx
===================================================================
--- trunk/libminisip/source/Minisip.cxx	2007-03-08 04:27:01 UTC (rev 3237)
+++ trunk/libminisip/source/Minisip.cxx	2007-03-08 04:33:05 UTC (rev 3238)
@@ -257,10 +257,7 @@
 Minisip::~Minisip(){
 }
 
-int Minisip::exit(){
-	int ret = 1;
-	mout << BOLD << "Minisip is Shutting down!!!" << PLAIN << end;
-	
+int Minisip::stop(){
 	if( ! sip.isNull() ) { //it may not be initialized ... 
 		//Send a shutdown command to the sip stack ... 
 		//it will take care of de-registering and closing on-going calls
@@ -268,40 +265,44 @@
 		SipSMCommand sipcmd(cmdstr, SipSMCommand::dialog_layer, SipSMCommand::dispatcher);
 		sip->getSipStack()->handleCommand(sipcmd);
 		sip->stop();
-	
-#ifdef DEBUG_OUTPUT
-		mout << "Waiting for the SipStack to close ..." << end;
-#endif
+	}
+}
+
+int Minisip::join(){
+	if( ! sip.isNull() ) { //it may not be initialized ... 
 		sip->join();
-		sip->getSipStack()->setCallback( NULL );
-		sip->getSipStack()->setDefaultDialogCommandHandler( NULL );
+		sip->getSipStack()->free();
 		sip = NULL;
 	}
-
 	gui->setCallback( NULL );
 	gui->setSipSoftPhoneConfiguration( NULL );
 
 	stopDebugger();
-	
-/*	if( messageRouter){
-		mout << "Delete messageRouter" << end;
-		delete messageRouter;
-	}
-*/
-	
+
 	messageRouter->clear();
 	messageRouter=NULL;
 
-
-	//phoneConf->sip = NULL;
 	phoneConf = NULL;
 	mediaHandler = NULL;
 	confMessageRouter->setGui(NULL);
 	confMessageRouter = NULL;
 	gui = NULL;
 
+}
+
+
+int Minisip::exit(){
+	int ret = 1;
+	mout << BOLD << "Minisip is Shutting down!!!" << PLAIN << end;
+
+	stop();
+#ifdef DEBUG_OUTPUT
+		mout << "Waiting for the SipStack to close ..." << end;
+#endif
+	join();
+	
 	mout << end << end << BOLD << "Minisip can't wait to see you again! Bye!" << PLAIN << end << end << end;
-	return ret;
+	return 1;
 }
 
 int Minisip::startSip() {
@@ -406,9 +407,9 @@
 
 
 #ifdef SCSIM_SUPPORT
-		MRef<SmartCardDetector*> scdetect = new SmartCardDetector(*messageRouter);
-		messageRouter->addSubsystem("smartcard",*scdetect);
-		scdetect->start();
+//		MRef<SmartCardDetector*> scdetect = new SmartCardDetector(*messageRouter);
+//		messageRouter->addSubsystem("smartcard",*scdetect);
+//		scdetect->start();
 #endif
 
 		/*

Modified: trunk/libminisip/source/sip/SipSoftPhoneConfiguration.cxx
===================================================================
--- trunk/libminisip/source/sip/SipSoftPhoneConfiguration.cxx	2007-03-08 04:27:01 UTC (rev 3237)
+++ trunk/libminisip/source/sip/SipSoftPhoneConfiguration.cxx	2007-03-08 04:33:05 UTC (rev 3238)
@@ -93,6 +93,10 @@
 }
 
 SipSoftPhoneConfiguration::~SipSoftPhoneConfiguration(){
+	std::list<MRef<PhoneBook *> >::iterator i;
+	for (i=phonebooks.begin(); i!=phonebooks.end() ; i++){
+		(*i)->free();
+	}
 }
 
 void SipSoftPhoneConfiguration::save(){



More information about the Minisip-devel mailing list