mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
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@vmware.com> Reviewed-by: Charmaine Lee <charmainel@vmware.com>
This commit is contained in:
parent
166769fe4b
commit
a1c9feafd5
1 changed files with 26 additions and 0 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue