X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Flttng-ctl.c;h=033a28105ef6744f464434c32ad0f01b2ada889c;hp=afd55a1abf882e41ce6acb8bbceaec46ff77fe2e;hb=850767541647c102a299d7fbc39c97555ac70224;hpb=bc89445574c5bef2a905f213c3a615ea559bd4c8 diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c index afd55a1ab..033a28105 100644 --- a/src/lib/lttng-ctl/lttng-ctl.c +++ b/src/lib/lttng-ctl/lttng-ctl.c @@ -340,6 +340,11 @@ static int connect_sessiond(void) { int ret; + /* Don't try to connect if already connected. */ + if (connected) { + return 0; + } + ret = set_session_daemon_path(); if (ret < 0) { goto error; @@ -635,9 +640,14 @@ int lttng_add_context(struct lttng_handle *handle, lsm.cmd_type = LTTNG_ADD_CONTEXT; - /* Copy channel name */ - lttng_ctl_copy_string(lsm.u.context.channel_name, channel_name, - sizeof(lsm.u.context.channel_name)); + /* If no channel name, send empty string. */ + if (channel_name == NULL) { + lttng_ctl_copy_string(lsm.u.context.channel_name, "", + sizeof(lsm.u.context.channel_name)); + } else { + lttng_ctl_copy_string(lsm.u.context.channel_name, channel_name, + sizeof(lsm.u.context.channel_name)); + } lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain); @@ -666,9 +676,9 @@ int lttng_enable_event(struct lttng_handle *handle, memset(&lsm, 0, sizeof(lsm)); - /* If no channel name, we put the default name */ + /* If no channel name, send empty string. */ if (channel_name == NULL) { - lttng_ctl_copy_string(lsm.u.enable.channel_name, DEFAULT_CHANNEL_NAME, + lttng_ctl_copy_string(lsm.u.enable.channel_name, "", sizeof(lsm.u.enable.channel_name)); } else { lttng_ctl_copy_string(lsm.u.enable.channel_name, channel_name, @@ -795,9 +805,15 @@ int lttng_enable_event_with_filter(struct lttng_handle *handle, lsm.cmd_type = LTTNG_ENABLE_EVENT_WITH_FILTER; - /* Copy channel name */ - lttng_ctl_copy_string(lsm.u.enable.channel_name, channel_name, - sizeof(lsm.u.enable.channel_name)); + /* If no channel name, send empty string. */ + if (channel_name == NULL) { + lttng_ctl_copy_string(lsm.u.enable.channel_name, "", + sizeof(lsm.u.enable.channel_name)); + } else { + lttng_ctl_copy_string(lsm.u.enable.channel_name, channel_name, + sizeof(lsm.u.enable.channel_name)); + } + /* Copy event name */ if (event) { memcpy(&lsm.u.enable.event, event, sizeof(lsm.u.enable.event)); @@ -850,11 +866,12 @@ int lttng_disable_event(struct lttng_handle *handle, const char *name, memset(&lsm, 0, sizeof(lsm)); - if (channel_name) { - lttng_ctl_copy_string(lsm.u.disable.channel_name, channel_name, + /* If no channel name, send empty string. */ + if (channel_name == NULL) { + lttng_ctl_copy_string(lsm.u.disable.channel_name, "", sizeof(lsm.u.disable.channel_name)); } else { - lttng_ctl_copy_string(lsm.u.disable.channel_name, DEFAULT_CHANNEL_NAME, + lttng_ctl_copy_string(lsm.u.disable.channel_name, channel_name, sizeof(lsm.u.disable.channel_name)); } @@ -1466,7 +1483,7 @@ int _lttng_create_session_ext(const char *name, const char *url, struct lttcomm_session_msg lsm; struct lttng_uri *uris = NULL; - if (name == NULL || datetime == NULL || url == NULL) { + if (name == NULL || datetime == NULL) { return -LTTNG_ERR_INVALID; } @@ -1542,6 +1559,41 @@ int lttng_data_pending(const char *session_name) return ret; } +/* + * Create a session exclusively used for snapshot. + * + * Returns LTTNG_OK on success or a negative error code. + */ +int lttng_create_session_snapshot(const char *name, const char *snapshot_url) +{ + int ret; + ssize_t size; + struct lttcomm_session_msg lsm; + struct lttng_uri *uris = NULL; + + if (name == NULL) { + return -LTTNG_ERR_INVALID; + } + + memset(&lsm, 0, sizeof(lsm)); + + lsm.cmd_type = LTTNG_CREATE_SESSION_SNAPSHOT; + lttng_ctl_copy_string(lsm.session.name, name, sizeof(lsm.session.name)); + + size = uri_parse_str_urls(snapshot_url, NULL, &uris); + if (size < 0) { + return -LTTNG_ERR_INVALID; + } + + lsm.u.uri.size = size; + + ret = lttng_ctl_ask_sessiond_varlen(&lsm, uris, + sizeof(struct lttng_uri) * size, NULL); + + free(uris); + return ret; +} + /* * lib constructor */