X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=liblttctl%2Fliblttctl.c;h=c88ece8d89468971e5b31dfdd5e0308fadd8b6aa;hb=341bb0ddf95839d1dee7b799141f263808bbf029;hp=6d49aeb37b440dc631376975ef1cac3acb2120d6;hpb=22acd9c7dda2c48c4a161aa39b5a598fef4f6310;p=ltt-control.git diff --git a/liblttctl/liblttctl.c b/liblttctl/liblttctl.c index 6d49aeb..c88ece8 100644 --- a/liblttctl/liblttctl.c +++ b/liblttctl/liblttctl.c @@ -443,6 +443,7 @@ static int __lttctl_set_channel_enable(const char *name, const char *channel, return ret; } + int lttctl_set_channel_enable(const char *name, const char *channel, int enable) { @@ -639,7 +640,9 @@ static int __lttctl_set_channel_subbuf_size(const char *name, ret = lttctl_sendop(ctlfname, opstr); if (ret) fprintf(stderr, "Set channel's subbuf size failed\n"); + return ret; } + int lttctl_set_channel_subbuf_size(const char *name, const char *channel, unsigned subbuf_size) { @@ -690,6 +693,74 @@ arg_error: return ret; } +static int __lttctl_set_channel_switch_timer(const char *name, + const char *channel, unsigned switch_timer) +{ + int ret; + char ctlfname[PATH_MAX]; + char opstr[32]; + + sprintf(ctlfname, "%s/ltt/control/%s/channel/%s/switch_timer", + debugfsmntdir, name, channel); + + sprintf(opstr, "%u", switch_timer); + + ret = lttctl_sendop(ctlfname, opstr); + if (ret) + fprintf(stderr, "Set channel's switch timer failed\n"); + return ret; +} + +int lttctl_set_channel_switch_timer(const char *name, const char *channel, + unsigned switch_timer) +{ + int ret; + char **channellist; + int n_channel; + + if (!name || !channel) { + fprintf(stderr, "%s: args invalid\n", __func__); + ret = -EINVAL; + goto arg_error; + } + + ret = lttctl_check_trace(name, 1); + if (ret) + goto arg_error; + + if (strcmp(channel, "all")) { + ret = __lttctl_set_channel_subbuf_size(name, channel, + switch_timer); + if (ret) + goto op_err; + } else { + /* allow set subbuf_size for metadata channel */ + n_channel = lttctl_get_channellist(name, &channellist, 1); + if (n_channel < 0) { + fprintf(stderr, "%s: lttctl_get_channellist failed\n", + __func__); + ret = -ENOENT; + goto op_err; + } + + for (; n_channel > 0; n_channel--) { + ret = __lttctl_set_channel_switch_timer(name, + channellist[n_channel - 1], switch_timer); + if (ret) + goto op_err_clean; + } + lttctl_free_channellist(channellist, n_channel); + } + + return 0; + +op_err_clean: + lttctl_free_channellist(channellist, n_channel); +op_err: +arg_error: + return ret; +} + int getdebugfsmntdir(char *mntdir) { char mnt_dir[PATH_MAX];