Use rseq for commit counter
[lttng-ust.git] / libringbuffer / ring_buffer_frontend.c
index 07724b71ceb8939b0dfaac3872dc0483de6fb451..46751a2d8f58269a940c6efd3fa42f9a64a335c4 100644 (file)
@@ -185,6 +185,7 @@ void lib_ring_buffer_reset(struct lttng_ust_lib_ring_buffer *buf,
                if (!cc_cold)
                        return;
                v_set(config, &cc_hot->cc, 0);
+               cc_hot->cc_rseq = 0;
                v_set(config, &cc_hot->seq, 0);
                v_set(config, &cc_cold->cc_sb, 0);
        }
@@ -901,11 +902,12 @@ static void channel_print_errors(struct channel *chan,
 }
 
 static void channel_free(struct channel *chan,
-               struct lttng_ust_shm_handle *handle)
+               struct lttng_ust_shm_handle *handle,
+               int consumer)
 {
        channel_backend_free(&chan->backend, handle);
        /* chan is freed by shm teardown */
-       shm_object_table_destroy(handle->table);
+       shm_object_table_destroy(handle->table, consumer);
        free(handle);
 }
 
@@ -1028,7 +1030,7 @@ struct lttng_ust_shm_handle *channel_create(const struct lttng_ust_lib_ring_buff
 
 error_backend_init:
 error_append:
-       shm_object_table_destroy(handle->table);
+       shm_object_table_destroy(handle->table, 1);
 error_table_alloc:
        free(handle);
        return NULL;
@@ -1060,7 +1062,7 @@ struct lttng_ust_shm_handle *channel_handle_create(void *data,
        return handle;
 
 error_table_object:
-       shm_object_table_destroy(handle->table);
+       shm_object_table_destroy(handle->table, 0);
 error_table_alloc:
        free(handle);
        return NULL;
@@ -1088,9 +1090,10 @@ unsigned int channel_handle_get_nr_streams(struct lttng_ust_shm_handle *handle)
 }
 
 static
-void channel_release(struct channel *chan, struct lttng_ust_shm_handle *handle)
+void channel_release(struct channel *chan, struct lttng_ust_shm_handle *handle,
+               int consumer)
 {
-       channel_free(chan, handle);
+       channel_free(chan, handle, consumer);
 }
 
 /**
@@ -1122,7 +1125,7 @@ void channel_destroy(struct channel *chan, struct lttng_ust_shm_handle *handle,
         * sessiond/consumer are keeping a reference on the shm file
         * descriptor directly. No need to refcount.
         */
-       channel_release(chan, handle);
+       channel_release(chan, handle, consumer);
        return;
 }
 
@@ -1583,6 +1586,7 @@ void lib_ring_buffer_print_subbuffer_errors(struct lttng_ust_lib_ring_buffer *bu
        if (!cc_cold)
                return;
        commit_count = v_read(config, &cc_hot->cc);
+       commit_count += cc_hot->cc_rseq;
        commit_count_sb = v_read(config, &cc_cold->cc_sb);
 
        if (subbuf_offset(commit_count, chan) != 0)
@@ -1695,6 +1699,7 @@ void lib_ring_buffer_switch_old_start(struct lttng_ust_lib_ring_buffer *buf,
        v_add(config, config->cb.subbuffer_header_size(),
              &cc_hot->cc);
        commit_count = v_read(config, &cc_hot->cc);
+       commit_count += cc_hot->cc_rseq;
        /* Check if the written buffer has to be delivered */
        lib_ring_buffer_check_deliver(config, buf, chan, offsets->old,
                                      commit_count, oldidx, handle, tsc);
@@ -1738,6 +1743,7 @@ void lib_ring_buffer_switch_old_end(struct lttng_ust_lib_ring_buffer *buf,
                return;
        v_add(config, padding_size, &cc_hot->cc);
        commit_count = v_read(config, &cc_hot->cc);
+       commit_count += cc_hot->cc_rseq;
        lib_ring_buffer_check_deliver(config, buf, chan, offsets->old - 1,
                                      commit_count, oldidx, handle, tsc);
        lib_ring_buffer_write_commit_counter(config, buf, chan,
@@ -1776,6 +1782,7 @@ void lib_ring_buffer_switch_new_start(struct lttng_ust_lib_ring_buffer *buf,
                return;
        v_add(config, config->cb.subbuffer_header_size(), &cc_hot->cc);
        commit_count = v_read(config, &cc_hot->cc);
+       commit_count += cc_hot->cc_rseq;
        /* Check if the written buffer has to be delivered */
        lib_ring_buffer_check_deliver(config, buf, chan, offsets->begin,
                                      commit_count, beginidx, handle, tsc);
This page took 0.026369 seconds and 5 git commands to generate.