From 0ddffd3ef6c7d005e7c436e1cd02dbe03aa97a7b Mon Sep 17 00:00:00 2001 From: Brian West Date: Fri, 2 Mar 2007 23:38:01 +0000 Subject: [PATCH] fix potential naughty bug you will need 'make sure' git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4432 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_core.h | 6 +++--- src/include/switch_module_interfaces.h | 2 +- src/mod/endpoints/mod_woomera/mod_woomera.c | 4 ++-- src/switch_core.c | 13 +++++++------ src/switch_ivr.c | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index 1266aed580..7229b046d4 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -428,7 +428,7 @@ SWITCH_DECLARE(switch_memory_pool_t *) switch_core_session_get_pool(switch_core_ \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(const switch_endpoint_interface_t *endpoint_interface, switch_memory_pool_t *pool); +SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request(const switch_endpoint_interface_t *endpoint_interface, switch_memory_pool_t **pool); /*! \brief Destroy a session and return the memory pool to the core @@ -449,7 +449,7 @@ SWITCH_DECLARE(uint32_t) switch_core_session_count(void); \param pool the pool to use \return the newly created session */ -SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_by_name(char *endpoint_name, switch_memory_pool_t *pool); +SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_by_name(char *endpoint_name, switch_memory_pool_t **pool); /*! \brief Launch the session thread (state machine) on a given session @@ -649,7 +649,7 @@ SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(switch_ char *endpoint_name, switch_caller_profile_t *caller_profile, switch_core_session_t **new_session, - switch_memory_pool_t *pool); + switch_memory_pool_t **pool); /*! \brief Answer the channel of a given session diff --git a/src/include/switch_module_interfaces.h b/src/include/switch_module_interfaces.h index ccd0ba3892..3c69accbe6 100644 --- a/src/include/switch_module_interfaces.h +++ b/src/include/switch_module_interfaces.h @@ -172,7 +172,7 @@ struct switch_io_event_hooks { /*! \brief A table of i/o routines that an endpoint interface can implement */ struct switch_io_routines { /*! creates an outgoing session from given session, caller profile */ - switch_call_cause_t (*outgoing_channel)(switch_core_session_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t *); + switch_call_cause_t (*outgoing_channel)(switch_core_session_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t **); /*! answers the given session's channel */ switch_status_t (*answer_channel)(switch_core_session_t *); /*! read a frame from a session */ diff --git a/src/mod/endpoints/mod_woomera/mod_woomera.c b/src/mod/endpoints/mod_woomera/mod_woomera.c index b068882396..2965853dca 100644 --- a/src/mod/endpoints/mod_woomera/mod_woomera.c +++ b/src/mod/endpoints/mod_woomera/mod_woomera.c @@ -170,7 +170,7 @@ static switch_status_t woomera_on_ring(switch_core_session_t *session); static switch_status_t woomera_on_loopback(switch_core_session_t *session); static switch_status_t woomera_on_transmit(switch_core_session_t *session); static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session, switch_caller_profile_t *outbound_profile, - switch_core_session_t **new_session, switch_memory_pool_t *pool); + switch_core_session_t **new_session, switch_memory_pool_t **pool); static switch_status_t woomera_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id); static switch_status_t woomera_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, @@ -482,7 +482,7 @@ static const switch_loadable_module_interface_t woomera_module_interface = { that allocate memory or you will have 1 channel with memory allocated from another channel's pool! */ static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session, switch_caller_profile_t *outbound_profile, - switch_core_session_t **new_session, switch_memory_pool_t *pool) + switch_core_session_t **new_session, switch_memory_pool_t **pool) { if ((*new_session = switch_core_session_request(&woomera_endpoint_interface, pool)) != 0) { struct private_object *tech_pvt; diff --git a/src/switch_core.c b/src/switch_core.c index 91a97e6543..bd161757ef 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1596,7 +1596,7 @@ SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(switch_ char *endpoint_name, switch_caller_profile_t *caller_profile, switch_core_session_t **new_session, - switch_memory_pool_t *pool) + switch_memory_pool_t **pool) { switch_io_event_hook_outgoing_channel_t *ptr; switch_status_t status = SWITCH_STATUS_FALSE; @@ -3693,8 +3693,8 @@ SWITCH_DECLARE(void *) switch_core_alloc(switch_memory_pool_t *pool, switch_size return ptr; } -SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request(const switch_endpoint_interface_t *endpoint_interface, - switch_memory_pool_t *pool) +SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request(const switch_endpoint_interface_t *endpoint_interface, switch_memory_pool_t **pool) + { switch_memory_pool_t *usepool; switch_core_session_t *session; @@ -3717,8 +3717,9 @@ SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request(const switch return NULL; } - if (pool) { - usepool = pool; + if (*pool) { + usepool = *pool; + *pool = NULL; } else if (switch_core_new_memory_pool(&usepool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Could not allocate memory pool\n"); return NULL; @@ -3778,7 +3779,7 @@ SWITCH_DECLARE(uint32_t) switch_core_session_count(void) return runtime.session_count; } -SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_by_name(char *endpoint_name, switch_memory_pool_t *pool) +SWITCH_DECLARE(switch_core_session_t *) switch_core_session_request_by_name(char *endpoint_name, switch_memory_pool_t **pool) { const switch_endpoint_interface_t *endpoint_interface; diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 4b3159d868..f137c734e8 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -2750,7 +2750,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess } } - if ((reason = switch_core_session_outgoing_channel(session, chan_type, caller_profiles[i], &peer_sessions[i], pool)) != SWITCH_CAUSE_SUCCESS) { + if ((reason = switch_core_session_outgoing_channel(session, chan_type, caller_profiles[i], &peer_sessions[i], &pool)) != SWITCH_CAUSE_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel! cause: %s\n", switch_channel_cause2str(reason)); if (pool) { switch_core_destroy_memory_pool(&pool);