ret = -1;
goto end;
}
-
+ if (ret) {
+ /* Fatal error. */
+ goto end;
+ }
if (!evaluation) {
/* Evaluation yielded nothing. Normal exit. */
DBG("[notification-thread] Newly subscribed-to condition evaluated to false, nothing to report to client");
* buffers. Therefore, we reject triggers that require that
* mechanism to be available to be evaluated.
*/
- ret = kernel_supports_ring_buffer_snapshot_sample_positions(
- kernel_tracer_fd);
+ ret = kernel_supports_ring_buffer_snapshot_sample_positions();
break;
}
default:
struct cds_lfht_iter iter;
struct lttng_trigger_ht_element *trigger_ht_element;
+ rcu_read_lock();
cds_lfht_for_each_entry(state->triggers_ht, &iter, trigger_ht_element,
node) {
int ret = handle_notification_thread_command_unregister_trigger(
error_occurred = true;
}
}
+ rcu_read_unlock();
return error_occurred ? -1 : 0;
}
ret = lttcomm_send_unix_sock_non_block(client->socket,
client->communication.outbound.buffer.data,
to_send_count);
- if ((ret < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) ||
- (ret > 0 && ret < to_send_count)) {
+ if ((ret >= 0 && ret < to_send_count)) {
DBG("[notification-thread] Client (socket fd = %i) outgoing queue could not be completely flushed",
client->socket);
to_send_count -= max(ret, 0);
- memcpy(client->communication.outbound.buffer.data,
+ memmove(client->communication.outbound.buffer.data,
client->communication.outbound.buffer.data +
client->communication.outbound.buffer.size - to_send_count,
to_send_count);