X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fconsumer.h;h=2bcb0db24d88fed6419d21685023bf1dbe0ffccb;hp=9981856feeca8734a428951418c34c7e2f380e96;hb=18eace3ba4aeaa6b869c8ad9ec1273381b4cbdee;hpb=536322299f7fc9ef136a0d7e50ba8e1b5d7a754b diff --git a/src/common/consumer.h b/src/common/consumer.h index 9981856fe..2bcb0db24 100644 --- a/src/common/consumer.h +++ b/src/common/consumer.h @@ -30,21 +30,6 @@ #include #include -/* - * When the receiving thread dies, we need to have a way to make the polling - * thread exit eventually. If all FDs hang up (normal case when the - * lttng-sessiond stops), we can exit cleanly, but if there is a problem and - * for whatever reason some FDs remain open, the consumer should still exit - * eventually. - * - * If the timeout is reached, it means that during this period no events - * occurred on the FDs so we need to force an exit. This case should not happen - * but it is a safety to ensure we won't block the consumer indefinitely. - * - * The value of 2 seconds is an arbitrary choice. - */ -#define LTTNG_CONSUMER_POLL_TIMEOUT 2000 - /* Commands for consumer */ enum lttng_consumer_command { LTTNG_CONSUMER_ADD_CHANNEL, @@ -57,7 +42,7 @@ enum lttng_consumer_command { /* Inform the consumer to kill a specific relayd connection */ LTTNG_CONSUMER_DESTROY_RELAYD, /* Return to the sessiond if there is data pending for a session */ - LTTNG_CONSUMER_DATA_AVAILABLE, + LTTNG_CONSUMER_DATA_PENDING, }; /* State of each fd in consumer */ @@ -74,6 +59,11 @@ enum lttng_consumer_type { LTTNG_CONSUMER32_UST, }; +enum consumer_endpoint_status { + CONSUMER_ENDPOINT_ACTIVE, + CONSUMER_ENDPOINT_INACTIVE, +}; + struct lttng_consumer_channel { struct lttng_ht_node_ulong node; int key; @@ -141,10 +131,22 @@ struct lttng_consumer_stream { uint64_t relayd_stream_id; /* Next sequence number to use for trace packet */ uint64_t next_net_seq_num; - /* Lock to use the stream FDs since they are used between threads. */ + /* + * Lock to use the stream FDs since they are used between threads. Using + * this lock with network streaming, when using the control mutex of a + * consumer_relayd_sock_pair, make sure to acquire this lock BEFORE locking + * it and releasing it AFTER the control mutex unlock. + */ pthread_mutex_t lock; /* Tracing session id */ uint64_t session_id; + /* + * Indicates if the stream end point is still active or not (network + * streaming or local file system). The thread "owning" the stream is + * handling this status and can be notified of a state change through the + * consumer data appropriate pipe. + */ + enum consumer_endpoint_status endpoint_status; }; /* @@ -414,5 +416,6 @@ int consumer_add_relayd_socket(int net_seq_idx, int sock_type, struct pollfd *consumer_sockpoll, struct lttcomm_sock *relayd_sock); void consumer_flag_relayd_for_destroy( struct consumer_relayd_sock_pair *relayd); +int consumer_data_pending(uint64_t id); #endif /* LIB_CONSUMER_H */