Repository: qpid-proton Updated Branches: refs/heads/go1 4afe30d87 -> 793e21010
PROTON-1380: Avoid freeing strings we pass to cyrus before cyrus finishes using them. Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/440131e0 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/440131e0 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/440131e0 Branch: refs/heads/go1 Commit: 440131e0efabc14df338125b6df0b0e88527614e Parents: 4abf23a Author: Andrew Stitcher <astitc...@apache.org> Authored: Wed Jan 4 14:11:27 2017 -0500 Committer: Andrew Stitcher <astitc...@apache.org> Committed: Wed Jan 4 14:11:27 2017 -0500 ---------------------------------------------------------------------- proton-c/src/sasl/cyrus_sasl.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/440131e0/proton-c/src/sasl/cyrus_sasl.c ---------------------------------------------------------------------- diff --git a/proton-c/src/sasl/cyrus_sasl.c b/proton-c/src/sasl/cyrus_sasl.c index 0d81489..ef1db9d 100644 --- a/proton-c/src/sasl/cyrus_sasl.c +++ b/proton-c/src/sasl/cyrus_sasl.c @@ -108,8 +108,9 @@ static const sasl_callback_t pni_user_callbacks[] = { // Machinery to initialise the cyrus library only once even in a multithreaded environment // Relies on pthreads. +static const char * const default_config_name = "proton-server"; static char *pni_cyrus_config_dir = NULL; -static const char *pni_cyrus_config_name = "proton-server"; +static char *pni_cyrus_config_name = NULL; static pthread_mutex_t pni_cyrus_mutex = PTHREAD_MUTEX_INITIALIZER; static bool pni_cyrus_client_started = false; static bool pni_cyrus_server_started = false; @@ -119,6 +120,8 @@ static void pni_cyrus_finish(void) { pthread_mutex_lock(&pni_cyrus_mutex); if (pni_cyrus_client_started) sasl_client_done(); if (pni_cyrus_server_started) sasl_server_done(); + free(pni_cyrus_config_dir); + free(pni_cyrus_config_name); pthread_mutex_unlock(&pni_cyrus_mutex); } @@ -145,7 +148,7 @@ static void pni_cyrus_server_once(void) { result = sasl_set_path(SASL_PATH_TYPE_CONFIG, pni_cyrus_config_dir); } if (result==SASL_OK) { - result = sasl_server_init(NULL, pni_cyrus_config_name); + result = sasl_server_init(NULL, pni_cyrus_config_name ? pni_cyrus_config_name : default_config_name); } pni_cyrus_server_started = true; pni_cyrus_server_init_rc = result; @@ -166,8 +169,10 @@ bool pni_init_client(pn_transport_t* transport) { int result; sasl_conn_t *cyrus_conn = NULL; do { - if (sasl->config_dir) { - pni_cyrus_config_dir = sasl->config_dir; + // If pni_cyrus_config_dir already set then we already called pni_cyrus_client_start or pni_cyrus_server_start + // and the directory is already fixed - don't change + if (sasl->config_dir && !pni_cyrus_config_dir) { + pni_cyrus_config_dir = pn_strdup(sasl->config_dir); } pni_cyrus_client_start(); @@ -304,12 +309,16 @@ bool pni_init_server(pn_transport_t* transport) int result; sasl_conn_t *cyrus_conn = NULL; do { - if (sasl->config_dir) { - pni_cyrus_config_dir = sasl->config_dir; + // If pni_cyrus_config_dir already set then we already called pni_cyrus_client_start or pni_cyrus_server_start + // and the directory is already fixed - don't change + if (sasl->config_dir && !pni_cyrus_config_dir) { + pni_cyrus_config_dir = pn_strdup(sasl->config_dir); } - if (sasl->config_name) { - pni_cyrus_config_name = sasl->config_name; + // If pni_cyrus_config_name already set then we already called pni_cyrus_server_start + // and the name is already fixed - don't change + if (sasl->config_name && !pni_cyrus_config_name) { + pni_cyrus_config_name = pn_strdup(sasl->config_name); } pni_cyrus_server_start(); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org