ssize_t ret, written_bytes = 0;
int rotation_ret;
struct stream_subbuffer subbuffer = {};
+ enum get_next_subbuffer_status get_next_status;
if (!locked_by_caller) {
stream->read_subbuffer_ops.lock(stream);
}
}
- ret = stream->read_subbuffer_ops.get_next_subbuffer(stream, &subbuffer);
- if (ret) {
- if (ret == -ENODATA) {
- /* Not an error. */
- ret = 0;
- goto sleep_stream;
- }
+ get_next_status = stream->read_subbuffer_ops.get_next_subbuffer(
+ stream, &subbuffer);
+ switch (get_next_status) {
+ case GET_NEXT_SUBBUFFER_STATUS_OK:
+ break;
+ case GET_NEXT_SUBBUFFER_STATUS_NO_DATA:
+ /* Not an error. */
+ ret = 0;
+ goto sleep_stream;
+ case GET_NEXT_SUBBUFFER_STATUS_ERROR:
+ ret = -1;
goto end;
+ default:
+ abort();
}
ret = stream->read_subbuffer_ops.pre_consume_subbuffer(
break;
case LTTNG_CONSUMER32_UST:
case LTTNG_CONSUMER64_UST:
- lttng_ustconsumer_clear_buffer(stream);
+ ret = lttng_ustconsumer_clear_buffer(stream);
+ if (ret < 0) {
+ ERR("Failed to clear ust stream (ret = %d)", ret);
+ goto end;
+ }
break;
default:
ERR("Unknown consumer_data type");
pthread_mutex_unlock(&stream->lock);
goto end_rcu_unlock;
}
+
+void lttng_consumer_sigbus_handle(void *addr)
+{
+ lttng_ustconsumer_sigbus_handle(addr);
+}