Coverity complained about data->sink being possibly NULL when it's dereferenced later. It was difficult for me to figure out whether that was a false positive or not. Hopefully the comments make it a bit easier to reason about the code in the future. It might be a good idea to set data->req_formats early, so that it's always set when setting the sink for a stream. Currently, if the application doesn't use the new format negotiation API, req_formats is set according to the sample spec at a very late stage. That means that sometimes data->sink gets set after data->req_formats, and sometimes data->req_formats gets set after data->sink, which makes it difficult to follow the code. CID: 1323591 --- src/pulsecore/sink-input.c | 5 +++++ src/pulsecore/source-output.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c index 05fe2c026..f993322e9 100644 --- a/src/pulsecore/sink-input.c +++ b/src/pulsecore/sink-input.c @@ -338,6 +338,11 @@ int pa_sink_input_new( data->format = pa_format_info_copy(pa_idxset_first(data->nego_formats, NULL)); if (PA_LIKELY(data->format)) { + /* We know that data->sink is set, because data->format has been set. + * data->format is set after a successful format negotiation, and that + * can't happen before data->sink has been set. */ + pa_assert(data->sink); + pa_log_debug("Negotiated format: %s", pa_format_info_snprint(fmt, sizeof(fmt), data->format)); } else { pa_format_info *format; diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c index f8a421aa8..f8f4e0ef0 100644 --- a/src/pulsecore/source-output.c +++ b/src/pulsecore/source-output.c @@ -280,6 +280,11 @@ int pa_source_output_new( data->format = pa_format_info_copy(pa_idxset_first(data->nego_formats, NULL)); if (PA_LIKELY(data->format)) { + /* We know that data->source is set, because data->format has been set. + * data->format is set after a successful format negotiation, and that + * can't happen before data->source has been set. */ + pa_assert(data->source); + pa_log_debug("Negotiated format: %s", pa_format_info_snprint(fmt, sizeof(fmt), data->format)); } else { pa_format_info *format; -- 2.14.2