Fixed issue when mcon->mutex was not initialized

git-svn-id: http://svn.openzap.org/svn/openzap/branches/sangoma_boost@889 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
David Yat Sin 2009-11-20 16:20:36 +00:00
parent f1eadddd31
commit ac06f30774
2 changed files with 23 additions and 25 deletions

View File

@ -1157,7 +1157,9 @@ static zap_status_t zap_boost_connection_open(zap_span_t *span)
{
zap_sangoma_boost_data_t *sangoma_boost_data = span->signal_data;
if (sangoma_boost_data->sigmod) {
return sangoma_boost_data->sigmod->start_span(span);
if (sangoma_boost_data->sigmod->start_span(span) != ZAP_SUCCESS) {
return ZAP_FAIL;
}
}
sangoma_boost_data->pcon = sangoma_boost_data->mcon;
@ -1338,9 +1340,10 @@ static void *zap_sangoma_boost_run(zap_thread_t *me, void *obj)
zap_log(ZAP_LOG_CRIT, "Boost event processing Error!\n");
end:
sangomabc_connection_close(&sangoma_boost_data->mcon);
sangomabc_connection_close(&sangoma_boost_data->pcon);
if (!sangoma_boost_data->sigmod) {
sangomabc_connection_close(&sangoma_boost_data->mcon);
sangomabc_connection_close(&sangoma_boost_data->pcon);
}
zap_clear_flag(sangoma_boost_data, ZAP_SANGOMA_BOOST_RUNNING);
@ -1371,17 +1374,14 @@ static ZIO_SIG_UNLOAD_FUNCTION(zap_sangoma_boost_destroy)
boost_sigmod_interface_t *sigmod = NULL;
const void *key = NULL;
void *val = NULL;
zap_dso_lib_t lib;
for (i = hashtable_first(g_boost_modules_hash); i; i = hashtable_next(i)) {
hashtable_this(i, &key, NULL, &val);
if (key && val) {
sigmod = val;
if (sigmod->on_unload() != ZAP_SUCCESS) {
zap_log(ZAP_LOG_ERROR, "Failed to unload boost signaling module object\n");
/* hope for the best */
} else {
zap_dso_destroy(sigmod->pvt);
}
lib = sigmod->pvt;
zap_dso_destroy(&lib);
}
}
@ -1581,7 +1581,7 @@ static ZIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(zap_sangoma_boost_configure_span)
if (hash_locked) \
zap_mutex_unlock(g_boost_modules_mutex); \
if (lib) \
zap_dso_destroy(lib); \
zap_dso_destroy(&lib); \
return retstatus;
boost_sigmod_interface_t *sigmod_iface = NULL;
@ -1646,10 +1646,6 @@ static ZIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(zap_sangoma_boost_configure_span)
FAIL_CONFIG_RETURN(ZAP_FAIL);
}
if (sigmod_iface->on_load() != ZAP_SUCCESS) {
zap_log(ZAP_LOG_ERROR, "Failed to load Sangoma boost signaling module interface '%s': on_load method failed\n", path);
FAIL_CONFIG_RETURN(ZAP_FAIL);
}
sigmod_iface->pvt = lib;
sigmod_iface->set_write_msg_cb(zap_boost_write_msg);
sigmod_iface->set_sig_status_cb(zap_boost_sig_status_change);

View File

@ -173,7 +173,6 @@ static int create_conn_socket(sangomabc_connection_t *mcon, char *local_ip, int
}
}
zap_mutex_create(&mcon->mutex);
return mcon->socket;
}
@ -201,8 +200,9 @@ int sangomabc_connection_close(sangomabc_connection_t *mcon)
int sangomabc_connection_open(sangomabc_connection_t *mcon, char *local_ip, int local_port, char *ip, int port)
{
zap_mutex_create(&mcon->mutex);
if (mcon->sigmod) {
zap_log(ZAP_LOG_WARNING, "I should not be called on a sigmod-managed connection!\n");
/*value of mcon->socket will be ignored in sigmod mode */
return 0;
}
create_conn_socket(mcon, local_ip, local_port, ip, port);
@ -474,22 +474,24 @@ int __sangomabc_connection_writep(sangomabc_connection_t *mcon, sangomabc_event_
int err;
int event_size=sizeof(sangomabc_event_t);
if (!event || mcon->socket < 0 || !mcon->mutex) {
zap_log(file, func, line, ZAP_LOG_LEVEL_CRIT, "Critical Error: No Event Device\n");
return -EINVAL;
abort();
if (!mcon->sigmod) {
if (!event || mcon->socket < 0 || !mcon->mutex) {
zap_log(file, func, line, ZAP_LOG_LEVEL_CRIT, "Critical Error: No Event Device\n");
return -EINVAL;
abort();
}
}
if (!boost_full_event(event->event_id)) {
event_size=sizeof(sangomabc_short_event_t);
}
zap_mutex_lock(mcon->mutex);
event->version = SIGBOOST_VERSION;
event->version = SIGBOOST_VERSION;
if (mcon->sigmod) {
mcon->sigmod->write_msg(mcon->span, event, event_size);
err = event_size;
return -1;
err = event_size;
} else {
err = sendto(mcon->socket, event, event_size, 0, (struct sockaddr *) &mcon->remote_addr, sizeof(mcon->remote_addr));
}