Mesa (master): st/wgl: add some mutex checking code
Brian Paul
brianp at kemper.freedesktop.org
Thu Nov 12 18:47:01 UTC 2015
Module: Mesa
Branch: master
Commit: a1c9feafd592d13f8215e7a535c68a03fd84849e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1c9feafd592d13f8215e7a535c68a03fd84849e
Author: José Fonseca <jfonseca at vmware.com>
Date: Tue Nov 10 14:41:30 2015 -0700
st/wgl: add some mutex checking code
This would have caught the locking bug that was fixed in the earlier
"st/wgl: fix locking issue in stw_st_framebuffer_present_locked()"
patch.
v2: minor coding style changes by Brian.
Reviewed-by: Sinclair Yeh <syeh at vmware.com>
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
---
src/gallium/state_trackers/wgl/stw_st.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/src/gallium/state_trackers/wgl/stw_st.c b/src/gallium/state_trackers/wgl/stw_st.c
index ecf4cfc..78586db 100644
--- a/src/gallium/state_trackers/wgl/stw_st.c
+++ b/src/gallium/state_trackers/wgl/stw_st.c
@@ -52,6 +52,28 @@ stw_st_framebuffer(struct st_framebuffer_iface *stfb)
return (struct stw_st_framebuffer *) stfb;
}
+
+/**
+ * Is the given mutex held by the calling thread?
+ */
+static bool
+own_mutex(const CRITICAL_SECTION *cs)
+{
+ // We can't compare OwningThread with our thread handle/id (see
+ // http://stackoverflow.com/a/12675635 ) but we can compare with the
+ // OwningThread member of a critical section we know we own.
+ CRITICAL_SECTION dummy;
+ InitializeCriticalSection(&dummy);
+ EnterCriticalSection(&dummy);
+ if (0)
+ _debug_printf("%p %p\n", cs->OwningThread, dummy.OwningThread);
+ bool ret = cs->OwningThread == dummy.OwningThread;
+ LeaveCriticalSection(&dummy);
+ DeleteCriticalSection(&dummy);
+ return ret;
+}
+
+
/**
* Remove outdated textures and create the requested ones.
*/
@@ -165,6 +187,8 @@ stw_st_framebuffer_present_locked(HDC hdc,
struct stw_st_framebuffer *stwfb = stw_st_framebuffer(stfb);
struct pipe_resource *resource;
+ assert(own_mutex(&stwfb->fb->mutex));
+
resource = stwfb->textures[statt];
if (resource) {
stw_framebuffer_present_locked(hdc, stwfb->fb, resource);
@@ -173,6 +197,8 @@ stw_st_framebuffer_present_locked(HDC hdc,
stw_framebuffer_unlock(stwfb->fb);
}
+ assert(!own_mutex(&stwfb->fb->mutex));
+
return TRUE;
}
More information about the mesa-commit
mailing list