On Thu, 2018-07-05 at 05:16 +0100, jnq...@gmail.com wrote:
> The internal operation_set_state function already returns early if the
> new state is the same as the existing state. The attached patch extends
> this to return early if already in a finalised (done/cancelled) state,
> i.e. blocks attempts to re-finalise into a different state.
> 
> This helps avoid unlinking more than once (or crashing on ref count
> assertion).
> 
> I was not certain whether an assertion would be a better alternative -
> with such a crash helping highlight usage problems...
> 
> The situation that lead to this was the thought of someone stupidly
> trying to pa_operation_cancel() a callback within the callback
> execution itself, while designing a solution for a memory leak related
> to cancellation within my Rust binding. While no-one should do such a
> thing, if they did, they'd either trip up a ref count assertion, or the
> operation would be unlinked twice, which would be bad. It's a simple
> thing to catch and mitigate, and could prove to be a useful
> bulletproofing measure for this function in general.

Thanks! This seems like a good approach to the problem. I applied the
patch. Please write the change rationale to the commit message in the
future. I copied your explanation to the commit message myself.

-- 
Tanu

https://www.patreon.com/tanuk
https://liberapay.com/tanuk
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to