X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;ds=sidebyside;f=libringbuffer%2Fring_buffer_frontend.c;h=cf012dfaf2225dfe7a66cf2fb63f4e860c48265d;hb=57773204abc43ed7d4350ac0d641ddbbda1e441e;hp=5e6d4df267d2c48d9d4c0bfa44b33202574dcea0;hpb=824f40b81426c6ac82685251018dae00947786a9;p=lttng-ust.git diff --git a/libringbuffer/ring_buffer_frontend.c b/libringbuffer/ring_buffer_frontend.c index 5e6d4df2..cf012dfa 100644 --- a/libringbuffer/ring_buffer_frontend.c +++ b/libringbuffer/ring_buffer_frontend.c @@ -266,7 +266,7 @@ static void lib_ring_buffer_start_switch_timer(struct lib_ring_buffer *buf, struct shm_handle *handle) { struct channel *chan = shmp(handle, buf->backend.chan); - const struct lib_ring_buffer_config *config = &chan->backend.config; + //const struct lib_ring_buffer_config *config = &chan->backend.config; if (!chan->switch_timer_interval || buf->switch_timer_enabled) return; @@ -398,8 +398,6 @@ static void channel_unregister_notifiers(struct channel *chan, static void channel_free(struct channel *chan, struct shm_handle *handle, int shadow) { - int ret; - if (!shadow) channel_backend_free(&chan->backend, handle); /* chan is freed by shm teardown */ @@ -462,7 +460,10 @@ struct shm_handle *channel_create(const struct lib_ring_buffer_config *config, shmobj = shm_object_table_append(handle->table, shmsize); if (!shmobj) goto error_append; + /* struct channel is at object 0, offset 0 (hardcoded) */ set_shmp(handle->chan, zalloc_shm(shmobj, sizeof(struct channel))); + assert(handle->chan._ref.index == 0); + assert(handle->chan._ref.offset == 0); chan = shmp(handle, handle->chan); if (!chan) goto error_append; @@ -528,7 +529,9 @@ struct shm_handle *channel_handle_create(int shm_fd, int wait_fd, shm_fd, wait_fd, memory_map_size); if (!object) goto error_table_object; - + /* struct channel is at object 0, offset 0 (hardcoded) */ + handle->chan._ref.index = 0; + handle->chan._ref.offset = 0; return handle; error_table_object: @@ -643,6 +646,8 @@ struct lib_ring_buffer *channel_get_ring_buffer( memory_map_size); return shmp(handle, chan->backend.buf[0].shmp); } else { + if (cpu >= num_possible_cpus()) + return NULL; ref = &chan->backend.buf[cpu].shmp._ref; shm_get_object_data(handle, ref, shm_fd, wait_fd, memory_map_size); @@ -654,8 +659,6 @@ int lib_ring_buffer_open_read(struct lib_ring_buffer *buf, struct shm_handle *handle, int shadow) { - struct channel *chan = shmp(handle, buf->backend.chan); - if (shadow) { if (uatomic_cmpxchg(&buf->active_shadow_readers, 0, 1) != 0) return -EBUSY;