summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
1dac018)
This return value can be caused by application terminating concurrently
(when using per-PID buffers), so it should not make the consumer
management thread exit.
CC: Aravind HT <aravind.ht@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
* Must be called with the registry lock held.
*
* On success, return the len of metadata pushed or else a negative value.
* Must be called with the registry lock held.
*
* On success, return the len of metadata pushed or else a negative value.
+ * Returning a -EPIPE return value means we could not send the metadata,
+ * but it can be caused by recoverable errors (e.g. the application has
+ * terminated concurrently).
*/
ssize_t ust_app_push_metadata(struct ust_registry_session *registry,
struct consumer_socket *socket, int send_zero_data)
*/
ssize_t ust_app_push_metadata(struct ust_registry_session *registry,
struct consumer_socket *socket, int send_zero_data)
/*
* On a push metadata error either the consumer is dead or the
* metadata channel has been destroyed because its endpoint
/*
* On a push metadata error either the consumer is dead or the
* metadata channel has been destroyed because its endpoint
- * might have died (e.g: relayd). If so, the metadata closed
- * flag is set to 1 so we deny pushing metadata again which is
- * not valid anymore on the consumer side.
+ * might have died (e.g: relayd), or because the application has
+ * exited. If so, the metadata closed flag is set to 1 so we
+ * deny pushing metadata again which is not valid anymore on the
+ * consumer side.
*/
if (registry->metadata_closed) {
return -EPIPE;
*/
if (registry->metadata_closed) {
return -EPIPE;
* of socket throughout this function.
*
* Return 0 on success else a negative error.
* of socket throughout this function.
*
* Return 0 on success else a negative error.
+ * Returning a -EPIPE return value means we could not send the metadata,
+ * but it can be caused by recoverable errors (e.g. the application has
+ * terminated concurrently).
*/
static int push_metadata(struct ust_registry_session *registry,
struct consumer_output *consumer)
*/
static int push_metadata(struct ust_registry_session *registry,
struct consumer_output *consumer)
pthread_mutex_lock(&ust_reg->lock);
ret_push = ust_app_push_metadata(ust_reg, socket, 1);
pthread_mutex_unlock(&ust_reg->lock);
pthread_mutex_lock(&ust_reg->lock);
ret_push = ust_app_push_metadata(ust_reg, socket, 1);
pthread_mutex_unlock(&ust_reg->lock);
+ if (ret_push == -EPIPE) {
+ DBG("Application or relay closed while pushing metadata");
+ } else if (ret_push < 0) {
ERR("Pushing metadata");
ret = -1;
goto end;
ERR("Pushing metadata");
ret = -1;
goto end;
+ } else {
+ DBG("UST Consumer metadata pushed successfully");
- DBG("UST Consumer metadata pushed successfully");