r3267 - in trunk/libminisip: include/libminisip/media source/subsystem_media

svn at minisip.org svn at minisip.org
Wed May 9 13:58:59 CEST 2007


Author: erik
Date: 2007-05-03 15:49:39 +0200 (Thu, 03 May 2007)
New Revision: 3267

Modified:
   trunk/libminisip/include/libminisip/media/CallRecorder.h
   trunk/libminisip/include/libminisip/media/MediaHandler.h
   trunk/libminisip/include/libminisip/media/Session.h
   trunk/libminisip/source/subsystem_media/CallRecorder.cxx
   trunk/libminisip/source/subsystem_media/Session.cxx
Log:

 * libminisip: Break CallRecorder<->RtpReceiver reference loop.



Modified: trunk/libminisip/include/libminisip/media/CallRecorder.h
===================================================================
--- trunk/libminisip/include/libminisip/media/CallRecorder.h	2007-05-03 13:45:17 UTC (rev 3266)
+++ trunk/libminisip/include/libminisip/media/CallRecorder.h	2007-05-03 13:49:39 UTC (rev 3267)
@@ -72,8 +72,15 @@
 				MRef<IpProvider *> ipProvider );
 		virtual ~CallRecorder( );
 
+		/**
+		 * Removes reference loops (needs to be called to let the 
+		 * garbage collector remove this object)
+		 */
+		void free();
+
 		virtual std::string getMemObjectType() const {return "CallRecorder";}
-	
+
+
 		/**
 		* Inherited from SoundRecorderCallback
 		* Function that will be called when sound data is available from

Modified: trunk/libminisip/include/libminisip/media/MediaHandler.h
===================================================================
--- trunk/libminisip/include/libminisip/media/MediaHandler.h	2007-05-03 13:45:17 UTC (rev 3266)
+++ trunk/libminisip/include/libminisip/media/MediaHandler.h	2007-05-03 13:49:39 UTC (rev 3267)
@@ -60,7 +60,7 @@
 		 * @param callId identifier shared with the SIP stack
 		 * @returns a reference to the session created
 		 */
-		MRef<Session *> createSession( /*SipDialogSecurityConfig &config*/ MRef<SipIdentity*> ident, std::string callId = "" );
+		MRef<Session *> createSession( MRef<SipIdentity*> ident, std::string callId = "" );
 		
 		/**
 		 * Registers a new media type (audio or video

Modified: trunk/libminisip/include/libminisip/media/Session.h
===================================================================
--- trunk/libminisip/include/libminisip/media/Session.h	2007-05-03 13:45:17 UTC (rev 3266)
+++ trunk/libminisip/include/libminisip/media/Session.h	2007-05-03 13:49:39 UTC (rev 3267)
@@ -32,8 +32,6 @@
 
 #include<libmikey/Mikey.h>
 
-//#include<libminisip/signaling/sip/SipDialogSecurityConfig.h>
-#include<libmsip/SipDialogConfig.h>
 #include<libminisip/media/DtmfSender.h>
 #include<libminisip/signaling/sdp/SdpPacket.h>
 
@@ -42,6 +40,7 @@
 class SdpHeaderM;
 class IPAddress;
 class SessionRegistry;
+class SipIdentity;
 
 /**
  * The session class is a representation of the media session associated
@@ -69,7 +68,7 @@
 		 * description
 		 * @param config security related configuration for the call
 		 */
-		Session( std::string localIp, /*SipDialogSecurityConfig &config*/ MRef<SipIdentity*> ident, std::string localIp6 = "" );
+		Session( std::string localIp, MRef<SipIdentity*> ident, std::string localIp6 = "" );
 		
 		/**
 		 * Destructor.
@@ -277,7 +276,6 @@
 
 		std::string errorString;
 		uint16_t errorCode;
-		//SipDialogSecurityConfig securityConfig;
 		MRef<SipIdentity*> identity;
 
 		int ka_type;

Modified: trunk/libminisip/source/subsystem_media/CallRecorder.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/CallRecorder.cxx	2007-05-03 13:45:17 UTC (rev 3266)
+++ trunk/libminisip/source/subsystem_media/CallRecorder.cxx	2007-05-03 13:49:39 UTC (rev 3267)
@@ -91,12 +91,23 @@
 			cerr << "CallRecorder::destroy - closing file opened to record = " << filename << endl;
 		}
 	}
-	audioMedia->getSoundIO()->unRegisterRecorderReceiver( this );
+	if (audioMedia)
+		audioMedia->getSoundIO()->unRegisterRecorderReceiver( this );
 	if( micData!=NULL ) delete micData;
 	if( ntwkData!=NULL ) delete ntwkData;
 // 
 }
 
+void CallRecorder::free(){
+	if (audioMedia)
+		audioMedia->getSoundIO()->unRegisterRecorderReceiver( this );
+	audioMedia=NULL;
+
+	//free inherited references
+	rtpReceiver=NULL;
+	rtp6Receiver=NULL;
+}
+
 void CallRecorder::setFilename( string name, int ssrc ) {
 	filename = "minisip.callrecord." + name + "." + itoa( ssrc ) + ".8khz.16bit.signed.raw.sw";
 #ifdef DEBUG_OUTPUT

Modified: trunk/libminisip/source/subsystem_media/Session.cxx
===================================================================
--- trunk/libminisip/source/subsystem_media/Session.cxx	2007-05-03 13:45:17 UTC (rev 3266)
+++ trunk/libminisip/source/subsystem_media/Session.cxx	2007-05-03 13:49:39 UTC (rev 3267)
@@ -43,6 +43,7 @@
 #include<libminisip/signaling/sdp/SdpHeaderM.h>
 #include<libminisip/signaling/sdp/SdpHeaderS.h>
 #include<libminisip/signaling/sdp/SdpHeaderO.h>
+#include<libmsip/SipDialogConfig.h>
 #include<libmikey/KeyAgreement.h>
 #include<libmikey/KeyAgreementDH.h>
 #include<libmutil/dbg.h>
@@ -889,6 +890,7 @@
 	#endif
 	} else {
 		cr->setAllowStart( false );
+		cr->free();
 	}
 	callRecorder = NULL; //stop the call recorder object
 



More information about the Minisip-devel mailing list