On Fri, Nov 4, 2016 at 10:23 AM, Jonathan Rajotte Julien <[email protected]> wrote: > > > On 2016-11-04 10:22 AM, Philippe Proulx wrote: >> >> On Fri, Nov 4, 2016 at 10:13 AM, Jonathan Rajotte Julien >> <[email protected]> wrote: >>> >>> Nitpicking: >>> >>> Should this be RETRY_DELAY_MS since other name scheme use the *_MS suffix >>> ? >>> >>> e.g: >>> LTTNG_UST_RING_BUFFER_RETRY_DELAY_MS >>> CONFIG_LTTNG_UST_DEFAULT_BLOCKING_RETRY_TIMEOUT_MS >>> timeout_left_ms >> >> Counterexample: LTTNG_UST_REGISTER_TIMEOUT. >> >> Phil > > > Well we have a problem.
Why? AFAIK the LTTng env. variables have no _MS suffix. See <http://lttng.org/man/8/lttng-sessiond/v2.8/#doc-_environment_variables> and <http://lttng.org/man/8/lttng-relayd/v2.8/#doc-_environment_variables>. Phil > > Jonathan > >> >>> >>>> /* >>>> * Non-static to ensure the compiler does not optimize away the xor. >>>> @@ -149,6 +150,14 @@ static struct timer_signal_data timer_signal = { >>>> .lock = PTHREAD_MUTEX_INITIALIZER, >>>> }; >>>> +int lttng_ust_blocking_retry_timeout = >>>> + CONFIG_LTTNG_UST_DEFAULT_BLOCKING_RETRY_TIMEOUT_MS; >>>> + >>>> +void lttng_ust_ringbuffer_set_retry_timeout(int timeout) >>>> +{ >>>> + lttng_ust_blocking_retry_timeout = timeout; >>>> +} >>>> + >>>> /** >>>> * lib_ring_buffer_reset - Reset ring buffer to initial values. >>>> * @buf: Ring buffer. >>>> @@ -1985,6 +1994,23 @@ void lib_ring_buffer_switch_slow(struct >>>> lttng_ust_lib_ring_buffer *buf, enum swi >>>> lib_ring_buffer_switch_old_end(buf, chan, &offsets, tsc, >>>> handle); >>>> } >>>> +static >>>> +bool handle_blocking_retry(int *timeout_left_ms) >>>> +{ >>>> + int timeout = *timeout_left_ms, delay; >>>> + >>>> + if (caa_likely(!timeout)) >>>> + return false; /* Do not retry, discard event. */ >>>> + if (timeout < 0) /* Wait forever. */ >>>> + delay = RETRY_DELAY; >>>> + else >>>> + delay = min_t(int, timeout, RETRY_DELAY); >>>> + (void) poll(NULL, 0, delay); >>>> + if (timeout > 0) >>>> + *timeout_left_ms -= delay; >>>> + return true; /* Retry. */ >>>> +} >>>> + >>>> /* >>>> * Returns : >>>> * 0 if ok >>>> @@ -2001,6 +2027,7 @@ int lib_ring_buffer_try_reserve_slow(struct >>>> lttng_ust_lib_ring_buffer *buf, >>>> const struct lttng_ust_lib_ring_buffer_config *config = >>>> &chan->backend.config; >>>> struct lttng_ust_shm_handle *handle = ctx->handle; >>>> unsigned long reserve_commit_diff, offset_cmp; >>>> + int timeout_left_ms = lttng_ust_blocking_retry_timeout; >>>> retry: >>>> offsets->begin = offset_cmp = v_read(config, &buf->offset); >>>> @@ -2083,6 +2110,9 @@ retry: >>>> >= chan->backend.buf_size)) { >>>> unsigned long nr_lost; >>>> + if >>>> (handle_blocking_retry(&timeout_left_ms)) >>>> + goto retry; >>>> + >>>> /* >>>> * We do not overwrite non consumed >>>> buffers >>>> * and we are full : record is lost. >>> >>> >>> -- >>> Jonathan R. Julien >>> Efficios >>> >>> >>> _______________________________________________ >>> lttng-dev mailing list >>> [email protected] >>> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev > > > -- > Jonathan R. Julien > Efficios > _______________________________________________ lttng-dev mailing list [email protected] https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
