From: Mathieu Desnoyers Date: Wed, 18 May 2016 18:04:11 +0000 (-0400) Subject: Fix: UST should not generate packet at destroy after stop X-Git-Tag: v2.9.0-rc1~176 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=0dd01979d6f26886199ef746377640b57260421c;hp=0dd01979d6f26886199ef746377640b57260421c Fix: UST should not generate packet at destroy after stop In the following scenario: - create, enable events (ust), - start - ... - stop (await for data_pending to complete) - destroy - rm the trace directory We would expect that the "rm" operation would not conflict with the consumer daemon trying to output data into the trace files, since the "stop" operation ensured that there was no data_pending. However, the "destroy" operation currently generates an extra packet after the data_pending check (the "on_stream_hangup"). This causes the consumer daemon to try to perform trace file rotation concurrently with the trace directory removal in the scenario above, which triggers errors. The main reason why this empty packet is generated by "destroy" is to deal with trace start/stop scenario which would otherwise generate a completely empty stream. Therefore, introduce the concept of a "quiescent stream". It is initialized at false on stream creation (first packet is empty). When tracing is started, it is set to false (for cases of start/stop/start). When tracing is stopped, if the stream is not quiescent, perform a "final" flush (which will generate an empty packet if the current packet was empty), and set quiescent to true. On "destroy" stream and on application hangup: if the stream is not quiescent, perform a "final" flush, and set the quiescent state to true. Signed-off-by: Mathieu Desnoyers Signed-off-by: Jérémie Galarneau ---