X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.c;h=5b37a8e7444a93da9600eaa9b96354309117a923;hb=6f6d3b6903fd9c577855211dc80f94199501a902;hp=2a810aba15fd2db25f4c47bf5d98bf3a70b0d607;hpb=92816cc33a1add3c8276839bd6335e17423577dd;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 2a810aba1..5b37a8e74 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -487,9 +487,11 @@ void delete_ust_app_channel(int sock, struct ust_app_channel *ua_chan, registry = get_session_registry(ua_chan->session); if (registry) { ust_registry_channel_del_free(registry, ua_chan->key, - true); + sock >= 0); + } + if (sock >= 0) { + save_per_pid_lost_discarded_counters(ua_chan); } - save_per_pid_lost_discarded_counters(ua_chan); } if (ua_chan->obj != NULL) { @@ -3017,7 +3019,7 @@ static int create_channel_per_pid(struct ust_app *app, if (ret < 0) { ERR("Error creating UST channel \"%s\" on the consumer daemon", ua_chan->name); - goto error; + goto error_remove_from_registry; } ret = send_channel_pid_to_ust(app, ua_sess, ua_chan); @@ -3025,7 +3027,7 @@ static int create_channel_per_pid(struct ust_app *app, if (ret != -ENOTCONN) { ERR("Error sending channel to application"); } - goto error; + goto error_remove_from_registry; } chan_reg_key = ua_chan->key; @@ -3045,9 +3047,13 @@ static int create_channel_per_pid(struct ust_app *app, if (cmd_ret != LTTNG_OK) { ret = - (int) cmd_ret; ERR("Failed to add channel to notification thread"); - goto error; + goto error_remove_from_registry; } +error_remove_from_registry: + if (ret) { + ust_registry_channel_del_free(registry, ua_chan->key, false); + } error: rcu_read_unlock(); return ret; @@ -5429,7 +5435,7 @@ static int reply_ust_register_channel(int sock, int cobjd, size_t nr_fields, struct ustctl_field *fields) { int ret, ret_code = 0; - uint32_t chan_id, reg_count; + uint32_t chan_id; uint64_t chan_reg_key; enum ustctl_channel_header type; struct ust_app *app; @@ -5481,13 +5487,12 @@ static int reply_ust_register_channel(int sock, int cobjd, assert(chan_reg); if (!chan_reg->register_done) { - reg_count = ust_registry_get_event_count(chan_reg); - if (reg_count < 31) { - type = USTCTL_CHANNEL_HEADER_COMPACT; - } else { - type = USTCTL_CHANNEL_HEADER_LARGE; - } - + /* + * TODO: eventually use the registry event count for + * this channel to better guess header type for per-pid + * buffers. + */ + type = USTCTL_CHANNEL_HEADER_LARGE; chan_reg->nr_ctx_fields = nr_fields; chan_reg->ctx_fields = fields; fields = NULL; @@ -6061,15 +6066,17 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess, nb_packets_per_stream, trace_archive_id); if (ret < 0) { + if (ret == -LTTNG_ERR_CHAN_NOT_FOUND) { + continue; + } goto error; } } registry = get_session_registry(ua_sess); if (!registry) { - DBG("Application session is being torn down. Abort snapshot record."); - ret = -1; - goto error; + DBG("Application session is being torn down. Skip application."); + continue; } ret = consumer_snapshot_channel(socket, registry->metadata_key, output, @@ -6077,6 +6084,9 @@ int ust_app_snapshot_record(struct ltt_ust_session *usess, pathname, wait, 0, trace_archive_id); if (ret < 0) { + if (ret == -LTTNG_ERR_CHAN_NOT_FOUND) { + continue; + } goto error; } } @@ -6326,11 +6336,12 @@ int ust_app_regenerate_statedump_all(struct ltt_ust_session *usess) /* * Rotate all the channels of a session. * - * Return 0 on success or else a negative value. + * Return LTTNG_OK on success or else an LTTng error code. */ -int ust_app_rotate_session(struct ltt_session *session) +enum lttng_error_code ust_app_rotate_session(struct ltt_session *session) { - int ret = 0; + int ret; + enum lttng_error_code cmd_ret = LTTNG_OK; struct lttng_ht_iter iter; struct ust_app *app; struct ltt_ust_session *usess = session->ust_session; @@ -6353,7 +6364,7 @@ int ust_app_rotate_session(struct ltt_session *session) socket = consumer_find_socket_by_bitness(reg->bits_per_long, usess->consumer); if (!socket) { - ret = -EINVAL; + cmd_ret = LTTNG_ERR_INVALID; goto error; } @@ -6362,6 +6373,7 @@ int ust_app_rotate_session(struct ltt_session *session) reg->uid, reg->bits_per_long); if (ret < 0 || ret == sizeof(pathname)) { PERROR("Failed to format rotation path"); + cmd_ret = LTTNG_ERR_INVALID; goto error; } @@ -6375,6 +6387,7 @@ int ust_app_rotate_session(struct ltt_session *session) /* is_metadata_channel */ false, session->current_archive_id); if (ret < 0) { + cmd_ret = LTTNG_ERR_ROTATION_FAIL_CONSUMER; goto error; } } @@ -6388,6 +6401,7 @@ int ust_app_rotate_session(struct ltt_session *session) /* is_metadata_channel */ true, session->current_archive_id); if (ret < 0) { + cmd_ret = LTTNG_ERR_ROTATION_FAIL_CONSUMER; goto error; } } @@ -6412,6 +6426,7 @@ int ust_app_rotate_session(struct ltt_session *session) ua_sess->path); if (ret < 0 || ret == sizeof(pathname)) { PERROR("Failed to format rotation path"); + cmd_ret = LTTNG_ERR_INVALID; goto error; } @@ -6419,15 +6434,14 @@ int ust_app_rotate_session(struct ltt_session *session) socket = consumer_find_socket_by_bitness(app->bits_per_long, usess->consumer); if (!socket) { - ret = -EINVAL; + cmd_ret = LTTNG_ERR_INVALID; goto error; } registry = get_session_registry(ua_sess); if (!registry) { - DBG("Application session is being torn down. Abort snapshot record."); - ret = -1; - goto error; + DBG("Application session is being torn down. Skip application."); + continue; } @@ -6440,6 +6454,10 @@ int ust_app_rotate_session(struct ltt_session *session) /* is_metadata_channel */ false, session->current_archive_id); if (ret < 0) { + /* Per-PID buffer and application going away. */ + if (ret == -LTTNG_ERR_CHAN_NOT_FOUND) + continue; + cmd_ret = LTTNG_ERR_ROTATION_FAIL_CONSUMER; goto error; } } @@ -6452,6 +6470,10 @@ int ust_app_rotate_session(struct ltt_session *session) /* is_metadata_channel */ true, session->current_archive_id); if (ret < 0) { + /* Per-PID buffer and application going away. */ + if (ret == -LTTNG_ERR_CHAN_NOT_FOUND) + continue; + cmd_ret = LTTNG_ERR_ROTATION_FAIL_CONSUMER; goto error; } } @@ -6462,9 +6484,9 @@ int ust_app_rotate_session(struct ltt_session *session) break; } - ret = LTTNG_OK; + cmd_ret = LTTNG_OK; error: rcu_read_unlock(); - return ret; + return cmd_ret; }