Since notification_clients are now accessed from multiple threads, it
is possible for a thread to access a client while it is being
"cleaned-up" following an error.
The 'active' communication flag allows a check to be performed before
any communication is attempted with a client. The communication is
considered 'active' once the handshake has been performed. It is
considered 'inactive' if a fatal protocol error occurs.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If16f83ef12fe9a6ef597ae464867011811389177
struct cds_lfht_node client_socket_ht_node;
struct cds_lfht_node client_id_ht_node;
struct {
+ /*
+ * If a client's communication is inactive, it means a fatal
+ * error (either a protocol error or the socket API returned
+ * a fatal error). No further communication should be attempted;
+ * the client is queued for clean-up.
+ */
+ bool active;
struct {
/*
* During the reception of a message, the reception
goto end;
}
client->validated = true;
+ client->communication.active = true;
break;
}
case LTTNG_NOTIFICATION_CHANNEL_MESSAGE_TYPE_SUBSCRIBE: