X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-abi.c;h=daf0d5e4caa0185652605e9a0496c2ad0fb2f0b3;hb=24e6ac9b18904de64d31dc79f53b1c8296541c8a;hp=762c9017aca96bf35b9971a8dd3b63409f19f2e3;hpb=8e696cfa579df0d75368a36d049e9c99b24e53f4;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-abi.c b/liblttng-ust/lttng-ust-abi.c index 762c9017..daf0d5e4 100644 --- a/liblttng-ust/lttng-ust-abi.c +++ b/liblttng-ust/lttng-ust-abi.c @@ -37,6 +37,7 @@ * - Takes instrumentation source specific arguments. */ +#define _LGPL_SOURCE #include #include #include @@ -44,10 +45,12 @@ #include #include #include +#include #include "tracepoint-internal.h" #include #include #include "lttng-tracer.h" +#include "string-utils.h" #include "../libringbuffer/shm.h" #include "../libringbuffer/frontend_types.h" @@ -208,7 +211,7 @@ int lttng_ust_objd_unref(int id, int is_owner) } if ((--obj->u.s.f_count) == 1) { const struct lttng_ust_objd_ops *ops = objd_ops(id); - + if (ops->release) ops->release(id); objd_free(id); @@ -390,6 +393,7 @@ static const struct lttng_ust_objd_ops lttng_ops = { .cmd = lttng_cmd, }; +static int lttng_abi_map_channel(int session_objd, struct lttng_ust_channel *ust_chan, union ust_args *uargs, @@ -434,6 +438,10 @@ int lttng_abi_map_channel(int session_objd, goto handle_error; } + /* Ownership of chan_data and wakeup_fd taken by channel handle. */ + uargs->channel.chan_data = NULL; + uargs->channel.wakeup_fd = -1; + chan = shmp(channel_handle, channel_handle->chan); assert(chan); chan->handle = channel_handle; @@ -513,27 +521,13 @@ int lttng_abi_map_channel(int session_objd, /* error path after channel was created */ objd_error: notransport: - free(lttng_chan); alloc_error: channel_destroy(chan, channel_handle, 0); return ret; - /* - * error path before channel creation (owning chan_data and - * wakeup_fd). - */ handle_error: active: invalid: - { - int close_ret; - - close_ret = close(wakeup_fd); - if (close_ret) { - PERROR("close"); - } - } - free(chan_data); return ret; } @@ -573,6 +567,8 @@ long lttng_session_cmd(int objd, unsigned int cmd, unsigned long arg, case LTTNG_UST_SESSION_STOP: case LTTNG_UST_DISABLE: return lttng_session_disable(session); + case LTTNG_UST_SESSION_STATEDUMP: + return lttng_session_statedump(session); default: return -EINVAL; } @@ -875,10 +871,14 @@ long lttng_channel_cmd(int objd, unsigned int cmd, unsigned long arg, { struct lttng_ust_event *event_param = (struct lttng_ust_event *) arg; - if (event_param->name[strlen(event_param->name) - 1] == '*') { - /* If ends with wildcard, create wildcard. */ + + if (strutils_is_star_glob_pattern(event_param->name)) { + /* + * If the event name is a star globbing pattern, + * we create the special star globbing enabler. + */ return lttng_abi_create_enabler(objd, event_param, - owner, LTTNG_ENABLER_WILDCARD); + owner, LTTNG_ENABLER_STAR_GLOB); } else { return lttng_abi_create_enabler(objd, event_param, owner, LTTNG_ENABLER_EVENT);