[Freeswitch-svn] [commit] r10375 - in freeswitch/trunk/src: . include include/private mod/dialplans/mod_dialplan_asterisk mod/languages/mod_spidermonkey

FreeSWITCH SVN anthm at freeswitch.org
Thu Nov 13 09:40:26 PST 2008


Author: anthm
Date: Thu Nov 13 12:40:25 2008
New Revision: 10375

Log:
more ref checking

Modified:
   freeswitch/trunk/src/include/private/switch_core_pvt.h
   freeswitch/trunk/src/include/switch_core.h
   freeswitch/trunk/src/include/switch_loadable_module.h
   freeswitch/trunk/src/include/switch_module_interfaces.h
   freeswitch/trunk/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c
   freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
   freeswitch/trunk/src/switch_core_codec.c
   freeswitch/trunk/src/switch_core_session.c
   freeswitch/trunk/src/switch_ivr.c
   freeswitch/trunk/src/switch_ivr_menu.c
   freeswitch/trunk/src/switch_ivr_originate.c

Modified: freeswitch/trunk/src/include/private/switch_core_pvt.h
==============================================================================
--- freeswitch/trunk/src/include/private/switch_core_pvt.h	(original)
+++ freeswitch/trunk/src/include/private/switch_core_pvt.h	Thu Nov 13 12:40:25 2008
@@ -94,7 +94,7 @@
 struct switch_core_session {
 	switch_memory_pool_t *pool;
 	switch_thread_t *thread;
-	const switch_endpoint_interface_t *endpoint_interface;
+	switch_endpoint_interface_t *endpoint_interface;
 	switch_size_t id;
 	switch_session_flag_t flags;
 	int thread_running;

Modified: freeswitch/trunk/src/include/switch_core.h
==============================================================================
--- freeswitch/trunk/src/include/switch_core.h	(original)
+++ freeswitch/trunk/src/include/switch_core.h	Thu Nov 13 12:40:25 2008
@@ -508,7 +508,7 @@
   \param pool the pool to use for the allocation (a new one will be used if NULL)
   \return the newly created session
 */
-SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_uuid(_In_ const switch_endpoint_interface_t *endpoint_interface,
+SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_uuid(_In_ switch_endpoint_interface_t *endpoint_interface,
 																		 _Inout_opt_ switch_memory_pool_t **pool, _In_opt_z_ const char *use_uuid);
 #define switch_core_session_request(_ep, _p) switch_core_session_request_uuid(_ep, _p, NULL)
 

Modified: freeswitch/trunk/src/include/switch_loadable_module.h
==============================================================================
--- freeswitch/trunk/src/include/switch_loadable_module.h	(original)
+++ freeswitch/trunk/src/include/switch_loadable_module.h	Thu Nov 13 12:40:25 2008
@@ -81,6 +81,7 @@
 	/*! the table of management interfaces the module has implmented */
 	switch_management_interface_t *management_interface;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_memory_pool_t *pool;
 };
 

Modified: freeswitch/trunk/src/include/switch_module_interfaces.h
==============================================================================
--- freeswitch/trunk/src/include/switch_module_interfaces.h	(original)
+++ freeswitch/trunk/src/include/switch_module_interfaces.h	Thu Nov 13 12:40:25 2008
@@ -172,6 +172,7 @@
 	void *private_info;
 
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 
 	/* parent */
 	switch_loadable_module_interface_t *parent;
@@ -226,6 +227,7 @@
 	/*! function to deallocate the timer */
 	switch_status_t (*timer_destroy) (switch_timer_t *);
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_timer_interface *next;
 };
@@ -237,6 +239,7 @@
 	/*! the function to read an extension and set a channels dialpan */
 	switch_dialplan_hunt_function_t hunt_function;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_dialplan_interface *next;
 };
@@ -262,6 +265,7 @@
 	/*! list of supported file extensions */
 	char **extens;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_file_interface *next;
 };
@@ -269,7 +273,7 @@
 /*! an abstract representation of a file handle (some parameters based on compat with libsndfile) */
 struct switch_file_handle {
 	/*! the interface of the module that implemented the current file type */
-	const switch_file_interface_t *file_interface;
+	switch_file_interface_t *file_interface;
 	/*! flags to control behaviour */
 	uint32_t flags;
 	/*! a file descriptor if neceessary */
@@ -340,6 +344,7 @@
 	/*! function to read results from the ASR */
 	switch_status_t (*asr_get_results) (switch_asr_handle_t *ah, char **xmlstr, switch_asr_flag_t *flags);
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_asr_interface *next;
 };
@@ -347,7 +352,7 @@
 /*! an abstract representation of an asr speech interface. */
 struct switch_asr_handle {
 	/*! the interface of the module that implemented the current speech interface */
-	const switch_asr_interface_t *asr_interface;
+	switch_asr_interface_t *asr_interface;
 	/*! flags to control behaviour */
 	uint32_t flags;
 	/*! The Name */
@@ -382,6 +387,7 @@
 	void (*speech_numeric_param_tts) (switch_speech_handle_t *sh, char *param, int val);
 	void (*speech_float_param_tts) (switch_speech_handle_t *sh, char *param, double val);
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_speech_interface *next;
 };
@@ -390,7 +396,7 @@
 /*! an abstract representation of a asr/tts speech interface. */
 struct switch_speech_handle {
 	/*! the interface of the module that implemented the current speech interface */
-	const switch_speech_interface_t *speech_interface;
+	switch_speech_interface_t *speech_interface;
 	/*! flags to control behaviour */
 	uint32_t flags;
 	/*! The Name */
@@ -416,6 +422,7 @@
 	/*! function to pass down to the module */
 	switch_say_callback_t say_function;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_say_interface *next;
 };
@@ -427,6 +434,7 @@
 	/*! function to open the directory interface */
 	switch_status_t (*chat_send) (char *proto, char *from, char *to, char *subject, char *body, char *hint);
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_chat_interface *next;
 };
@@ -438,6 +446,7 @@
 	/*! function to open the directory interface */
 	switch_status_t (*management_function) (char *relative_oid, switch_management_action_t action, char *data, switch_size_t datalen);
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_management_interface *next;
 };
@@ -457,6 +466,7 @@
 	/*! function to advance to the next name/value pair in the current record */
 	switch_status_t (*directory_next_pair) (switch_directory_handle_t *dh, char **var, char **val);
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_directory_interface *next;
 };
@@ -464,7 +474,7 @@
 /*! an abstract representation of a directory interface. */
 struct switch_directory_handle {
 	/*! the interface of the module that implemented the current directory interface */
-	const switch_directory_interface_t *directory_interface;
+	switch_directory_interface_t *directory_interface;
 	/*! flags to control behaviour */
 	uint32_t flags;
 
@@ -515,7 +525,7 @@
 /*! an abstract handle to a codec module */
 struct switch_codec {
 	/*! the codec interface table this handle uses */
-	const switch_codec_interface_t *codec_interface;
+	switch_codec_interface_t *codec_interface;
 	/*! the specific implementation of the above codec */
 	const switch_codec_implementation_t *implementation;
 	/*! fmtp line from remote sdp */
@@ -582,6 +592,7 @@
 	switch_codec_implementation_t *implementations;
 	uint32_t codec_id;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_codec_interface *next;
 };
@@ -601,6 +612,7 @@
 	/*! flags to control behaviour */
 	uint32_t flags;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_application_interface *next;
 };
@@ -616,12 +628,13 @@
 	/*! an example of the api syntax */
 	const char *syntax;
 	switch_thread_rwlock_t *rwlock;
+	int refs;
 	switch_loadable_module_interface_t *parent;
 	struct switch_api_interface *next;
 };
 
-#define PROTECT_INTERFACE(_it) switch_thread_rwlock_rdlock(_it->parent->rwlock); switch_thread_rwlock_rdlock(_it->rwlock)
-#define UNPROTECT_INTERFACE(_it) switch_thread_rwlock_unlock(_it->rwlock); switch_thread_rwlock_unlock(_it->parent->rwlock); _it = NULL
+#define PROTECT_INTERFACE(_it) if (!_it->refs) {switch_thread_rwlock_rdlock(_it->parent->rwlock); switch_thread_rwlock_rdlock(_it->rwlock); _it->refs++; _it->parent->refs++;}
+#define UNPROTECT_INTERFACE(_it) if (_it->refs) {switch_thread_rwlock_unlock(_it->rwlock); switch_thread_rwlock_unlock(_it->parent->rwlock); _it->refs--; _it->parent->refs--; _it = NULL;}
 
 SWITCH_END_EXTERN_C
 #endif

Modified: freeswitch/trunk/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c
==============================================================================
--- freeswitch/trunk/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c	(original)
+++ freeswitch/trunk/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c	Thu Nov 13 12:40:25 2008
@@ -38,7 +38,7 @@
 
 static switch_status_t exec_app(switch_core_session_t *session, char *app, char *arg)
 {
-	const switch_application_interface_t *application_interface;
+	switch_application_interface_t *application_interface;
 	switch_status_t status = SWITCH_STATUS_FALSE;
 
 	if ((application_interface = switch_loadable_module_get_application_interface(app))) {

Modified: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	(original)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	Thu Nov 13 12:40:25 2008
@@ -2199,7 +2199,7 @@
 	/* you can execute some apps before you answer  CHANNEL_SANITY_CHECK(); */
 
 	if (argc > 0) {
-		const switch_application_interface_t *application_interface;
+		switch_application_interface_t *application_interface;
 		char *app_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
 		char *app_arg = NULL;
 		jsrefcount saveDepth;

Modified: freeswitch/trunk/src/switch_core_codec.c
==============================================================================
--- freeswitch/trunk/src/switch_core_codec.c	(original)
+++ freeswitch/trunk/src/switch_core_codec.c	Thu Nov 13 12:40:25 2008
@@ -378,7 +378,7 @@
 													   uint32_t rate, int ms, int channels, uint32_t flags,
 													   const switch_codec_settings_t *codec_settings, switch_memory_pool_t *pool)
 {
-	const switch_codec_interface_t *codec_interface;
+	switch_codec_interface_t *codec_interface;
 	const switch_codec_implementation_t *iptr, *implementation = NULL;
 	const char *mode = fmtp;
 

Modified: freeswitch/trunk/src/switch_core_session.c
==============================================================================
--- freeswitch/trunk/src/switch_core_session.c	(original)
+++ freeswitch/trunk/src/switch_core_session.c	Thu Nov 13 12:40:25 2008
@@ -789,7 +789,7 @@
 {
 	switch_memory_pool_t *pool;
 	switch_event_t *event;
-	const switch_endpoint_interface_t *endpoint_interface = (*session)->endpoint_interface;
+	switch_endpoint_interface_t *endpoint_interface = (*session)->endpoint_interface;
 
 
 	switch_log_printf(SWITCH_CHANNEL_ID_LOG, file, func, line, NULL, SWITCH_LOG_NOTICE, "Close Channel %s [%s]\n",
@@ -998,7 +998,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_uuid(const switch_endpoint_interface_t
+SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_uuid(switch_endpoint_interface_t
 																		 *endpoint_interface, switch_memory_pool_t **pool, const char *use_uuid)
 {
 	switch_memory_pool_t *usepool;
@@ -1110,14 +1110,13 @@
 
 SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_by_name(const char *endpoint_name, switch_memory_pool_t **pool)
 {
-	const switch_endpoint_interface_t *endpoint_interface, *e;
+	switch_endpoint_interface_t *endpoint_interface;
 
 	if ((endpoint_interface = switch_loadable_module_get_endpoint_interface(endpoint_name)) == 0) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not locate channel type %s\n", endpoint_name);
 		return NULL;
 	}
-	e = endpoint_interface;
-	UNPROTECT_INTERFACE(e);
+
 	return switch_core_session_request(endpoint_interface, pool);
 
 }
@@ -1187,7 +1186,7 @@
 
 SWITCH_DECLARE(switch_status_t) switch_core_session_execute_application(switch_core_session_t *session, const char *app, const char *arg)
 {
-	const switch_application_interface_t *application_interface;
+	switch_application_interface_t *application_interface;
 	char *expanded = NULL;
 	const char *var;
 

Modified: freeswitch/trunk/src/switch_ivr.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr.c	(original)
+++ freeswitch/trunk/src/switch_ivr.c	Thu Nov 13 12:40:25 2008
@@ -344,7 +344,7 @@
 	}
 
 	if (cmd_hash == CMD_EXECUTE) {
-		const switch_application_interface_t *application_interface;
+		switch_application_interface_t *application_interface;
 		char *app_name = switch_event_get_header(event, "execute-app-name");
 		char *app_arg = switch_event_get_header(event, "execute-app-arg");
 		char *loop_h = switch_event_get_header(event, "loops");

Modified: freeswitch/trunk/src/switch_ivr_menu.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_menu.c	(original)
+++ freeswitch/trunk/src/switch_ivr_menu.c	Thu Nov 13 12:40:25 2008
@@ -463,7 +463,7 @@
 						break;
 					case SWITCH_IVR_ACTION_EXECAPP:
 						{
-							const switch_application_interface_t *application_interface;
+							switch_application_interface_t *application_interface;
 							char *app_name;
 							char *app_arg = NULL;
 

Modified: freeswitch/trunk/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_originate.c	(original)
+++ freeswitch/trunk/src/switch_ivr_originate.c	Thu Nov 13 12:40:25 2008
@@ -99,7 +99,7 @@
 	
 	if (!strcasecmp(collect->key, "exec")) {
 		char *data;
-		const switch_application_interface_t *application_interface;
+		switch_application_interface_t *application_interface;
 		char *app_name, *app_data;
 
 		if (!(data = collect->file)) {



More information about the Freeswitch-svn mailing list