The uri_parse() function call was leaking copy(ies) of lttng_uri
structure.
Fixes #420
Signed-off-by: David Goulet <dgoulet@efficios.com>
/* It's possible the control URIs array contains more than one URI */
memcpy(tmp_uris, ctrl_uris, sizeof(struct lttng_uri) * size_ctrl);
++idx;
/* It's possible the control URIs array contains more than one URI */
memcpy(tmp_uris, ctrl_uris, sizeof(struct lttng_uri) * size_ctrl);
++idx;
}
if (data_uris) {
memcpy(&tmp_uris[idx], data_uris, sizeof(struct lttng_uri));
}
if (data_uris) {
memcpy(&tmp_uris[idx], data_uris, sizeof(struct lttng_uri));
*/
int lttng_create_session(const char *name, const char *url)
{
*/
int lttng_create_session(const char *name, const char *url)
{
ssize_t size;
struct lttcomm_session_msg lsm;
struct lttng_uri *uris = NULL;
ssize_t size;
struct lttcomm_session_msg lsm;
struct lttng_uri *uris = NULL;
- return ask_sessiond_varlen(&lsm, uris, sizeof(struct lttng_uri) * size,
+ ret = ask_sessiond_varlen(&lsm, uris, sizeof(struct lttng_uri) * size,
+
+ free(uris);
+ return ret;
int lttng_set_consumer_url(struct lttng_handle *handle,
const char *control_url, const char *data_url)
{
int lttng_set_consumer_url(struct lttng_handle *handle,
const char *control_url, const char *data_url)
{
ssize_t size;
struct lttcomm_session_msg lsm;
struct lttng_uri *uris = NULL;
ssize_t size;
struct lttcomm_session_msg lsm;
struct lttng_uri *uris = NULL;
- return ask_sessiond_varlen(&lsm, uris, sizeof(struct lttng_uri) * size,
+ ret = ask_sessiond_varlen(&lsm, uris, sizeof(struct lttng_uri) * size,
+
+ free(uris);
+ return ret;
int _lttng_create_session_ext(const char *name, const char *url,
const char *datetime)
{
int _lttng_create_session_ext(const char *name, const char *url,
const char *datetime)
{
ssize_t size;
struct lttcomm_session_msg lsm;
struct lttng_uri *uris = NULL;
ssize_t size;
struct lttcomm_session_msg lsm;
struct lttng_uri *uris = NULL;
/* There should never be a data URL */
size = parse_str_urls_to_uri(url, NULL, &uris);
if (size < 0) {
/* There should never be a data URL */
size = parse_str_urls_to_uri(url, NULL, &uris);
if (size < 0) {
- return -LTTNG_ERR_INVALID;
+ ret = -LTTNG_ERR_INVALID;
+ goto error;
}
lsm.u.uri.size = size;
if (size > 0 && uris[0].dtype != LTTNG_DST_PATH && strlen(uris[0].subdir) == 0) {
}
lsm.u.uri.size = size;
if (size > 0 && uris[0].dtype != LTTNG_DST_PATH && strlen(uris[0].subdir) == 0) {
ret = snprintf(uris[0].subdir, sizeof(uris[0].subdir), "%s-%s", name,
datetime);
if (ret < 0) {
PERROR("snprintf uri subdir");
ret = snprintf(uris[0].subdir, sizeof(uris[0].subdir), "%s-%s", name,
datetime);
if (ret < 0) {
PERROR("snprintf uri subdir");
- return -LTTNG_ERR_FATAL;
+ ret = -LTTNG_ERR_FATAL;
+ goto error;
- return ask_sessiond_varlen(&lsm, uris, sizeof(struct lttng_uri) * size,
+ ret = ask_sessiond_varlen(&lsm, uris, sizeof(struct lttng_uri) * size,
+
+error:
+ free(uris);
+ return ret;