st/nine: Resolve deadlock in surface/volume dtors when using csmt
authorAxel Davy <axel.davy@ens.fr>
Wed, 15 Mar 2017 21:45:03 +0000 (22:45 +0100)
committerAxel Davy <axel.davy@ens.fr>
Sun, 26 Mar 2017 21:10:38 +0000 (23:10 +0200)
commitbd85bb51c717a1858157c73adcb689e3986b2134
tree7a9954aaaa694edf5cd64c25e865200a3f37f377
parent31f8b3babb5a2d685d6e8b8ed0a2120c7966e9b1
st/nine: Resolve deadlock in surface/volume dtors when using csmt

Surfaces and Volumes can be freed in the worker thread.

Without this patch, pending_uploads_counter could be non-zero
in the Surfaces or Volumes dtor, leading to deadlock.
Instead decrease properly the counter before releasing the
item.

Also avoid another potential deadlock if the item is not
properly unlocked: Do not call UnlockRect which will cause deadlock,
but free directly using the deadlock safe
nine_context_get_pipe_multithread.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99246

CC: "17.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Axel Davy <axel.davy@ens.fr>
Tested-by: James Harvey <lothmordor@gmail.com>
src/gallium/state_trackers/nine/nine_csmt_helper.h
src/gallium/state_trackers/nine/surface9.c
src/gallium/state_trackers/nine/volume9.c