X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Flttng-ust-abi.c;h=be9d1d31d82133e6e2277aeaaa520c359e34753c;hb=4cfec15c93af7e0cfe3ce769ee90486bb8ab7c37;hp=0c0d6bb726f9c62804f9f17ee7f726bd5627bf93;hpb=381c0f1ef474e0ae8a96b3753470ca4bda45c764;p=lttng-ust.git diff --git a/libust/lttng-ust-abi.c b/libust/lttng-ust-abi.c index 0c0d6bb7..be9d1d31 100644 --- a/libust/lttng-ust-abi.c +++ b/libust/lttng-ust-abi.c @@ -177,16 +177,8 @@ void objd_table_destroy(void) { int i; - for (i = 0; i < objd_table.allocated_len; i++) { - struct obj *obj = _objd_get(i); - const struct objd_ops *ops; - - if (!obj) - continue; - ops = obj->u.s.ops; - if (ops->release) - ops->release(i); - } + for (i = 0; i < objd_table.allocated_len; i++) + (void) objd_unref(i); free(objd_table.array); objd_table.array = NULL; objd_table.len = 0; @@ -216,7 +208,6 @@ int lttng_abi_create_root_handle(void) int root_handle; root_handle = objd_alloc(NULL, <tng_ops); - assert(root_handle == 0); return root_handle; } @@ -281,8 +272,14 @@ long lttng_abi_add_context(int objd, return -EPERM; switch (context_param->ctx) { + case LTTNG_UST_CONTEXT_PTHREAD_ID: + return lttng_add_pthread_id_to_ctx(ctx); case LTTNG_UST_CONTEXT_VTID: - //TODO return lttng_add_vtid_to_ctx(ctx); + return lttng_add_vtid_to_ctx(ctx); + case LTTNG_UST_CONTEXT_VPID: + return lttng_add_vpid_to_ctx(ctx); + case LTTNG_UST_CONTEXT_PROCNAME: + return lttng_add_procname_to_ctx(ctx); default: return -EINVAL; } @@ -408,7 +405,10 @@ int lttng_abi_create_channel(int session_objd, chan_param->subbuf_size, chan_param->num_subbuf, chan_param->switch_timer_interval, - chan_param->read_timer_interval); + chan_param->read_timer_interval, + &chan_param->shm_fd, + &chan_param->wait_fd, + &chan_param->memory_map_size); if (!chan) { ret = -EINVAL; goto chan_error; @@ -507,7 +507,7 @@ static const struct objd_ops lttng_session_ops = { }; struct stream_priv_data { - struct lib_ring_buffer *buf; + struct lttng_ust_lib_ring_buffer *buf; struct ltt_channel *ltt_chan; }; @@ -515,7 +515,7 @@ static int lttng_abi_open_stream(int channel_objd, struct lttng_ust_stream *info) { struct ltt_channel *channel = objd_private(channel_objd); - struct lib_ring_buffer *buf; + struct lttng_ust_lib_ring_buffer *buf; struct stream_priv_data *priv; int stream_objd, ret; @@ -632,6 +632,8 @@ long lttng_channel_cmd(int objd, unsigned int cmd, unsigned long arg) return ltt_channel_enable(channel); case LTTNG_UST_DISABLE: return ltt_channel_disable(channel); + case LTTNG_UST_FLUSH_BUFFER: + return channel->ops->flush_buffer(channel->chan, channel->handle); default: return -EINVAL; } @@ -653,6 +655,8 @@ long lttng_channel_cmd(int objd, unsigned int cmd, unsigned long arg) static long lttng_metadata_cmd(int objd, unsigned int cmd, unsigned long arg) { + struct ltt_channel *channel = objd_private(objd); + switch (cmd) { case LTTNG_UST_STREAM: { @@ -662,6 +666,8 @@ long lttng_metadata_cmd(int objd, unsigned int cmd, unsigned long arg) /* stream used as output */ return lttng_abi_open_stream(objd, stream); } + case LTTNG_UST_FLUSH_BUFFER: + return channel->ops->flush_buffer(channel->chan, channel->handle); default: return -EINVAL; } @@ -727,13 +733,10 @@ static const struct objd_ops lttng_metadata_ops = { * * This object descriptor implements lttng commands: * (None for now. Access is done directly though shm.) - * TODO: Add buffer flush. */ static long lttng_rb_cmd(int objd, unsigned int cmd, unsigned long arg) { - struct stream_priv_data *priv = objd_private(objd); - switch (cmd) { default: return -EINVAL; @@ -744,13 +747,14 @@ static int lttng_rb_release(int objd) { struct stream_priv_data *priv = objd_private(objd); - struct lib_ring_buffer *buf; + struct lttng_ust_lib_ring_buffer *buf; struct ltt_channel *channel; if (priv) { buf = priv->buf; channel = priv->ltt_chan; free(priv); + channel->ops->buffer_read_close(buf, channel->handle); return objd_unref(channel->objd); }