summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeon
diff options
context:
space:
mode:
authorDaniel Kurtz <[email protected]>2014-02-07 19:29:06 +0800
committerKenneth Graunke <[email protected]>2014-02-11 02:21:41 -0800
commitb47d231526821f5cff99546a984103a7222bc66c (patch)
tree403fa616a8d8d8ea43552d3a010eb4675a07705c /src/gallium/drivers/radeon
parente95a4ed2967346e6ff7efb9897d8c430fcaa90f7 (diff)
glsl: Add locking to builtin_builder singleton
Consider a multithreaded program with two contexts A and B, and the following scenario: 1. Context A calls initialize(), which allocates mem_ctx and starts building built-ins. 2. Context B calls initialize(), which sees mem_ctx != NULL and assumes everything is already set up. It returns. 3. Context B calls find(), which fails to find the built-in since it hasn't been created yet. 4. Context A finally finishes initializing the built-ins. This will break at step 3. Adding a lock ensures that subsequent callers of initialize() will wait until initialization is actually complete. Similarly, if any thread calls release while another thread is still initializing, or calling find(), the mem_ctx/shader would get free'd while from under it, leading to corruption or use-after-free crashes. Fixes sporadic failures in Piglit's glx-multithread-shader-compile. Bugzilla: https://bugs.freedesktop.org/69200 Signed-off-by: Daniel Kurtz <[email protected]> Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> Cc: "10.1 10.0" <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon')
0 files changed, 0 insertions, 0 deletions