mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-27 04:30:37 +02:00
wgl: Do not reach out and destroy contexts on cleanup.
Simply skip cleanup when contexts are still active. This addresses two issues: - in some situations the ICD DLL may be unloaded before the DLL that is using GL contexts is, so we may receive GL calls after stw_cleanup. - when aborting (exception, or control-c) the contexts may have been left in an inconsistent state and attempting to destroy can cause unpredictable results.
This commit is contained in:
parent
408f32dc16
commit
426f607aaa
1 changed files with 12 additions and 10 deletions
|
|
@ -152,24 +152,26 @@ stw_cleanup_thread(void)
|
|||
void
|
||||
stw_cleanup(void)
|
||||
{
|
||||
unsigned i;
|
||||
DHGLRC dhglrc;
|
||||
|
||||
debug_printf("%s\n", __FUNCTION__);
|
||||
|
||||
if (!stw_dev)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Abort cleanup if there are still active contexts. In some situations
|
||||
* this DLL may be unloaded before the DLL that is using GL contexts is.
|
||||
*/
|
||||
pipe_mutex_lock( stw_dev->ctx_mutex );
|
||||
{
|
||||
/* Ensure all contexts are destroyed */
|
||||
i = handle_table_get_first_handle(stw_dev->ctx_table);
|
||||
while (i) {
|
||||
DrvDeleteContext(i);
|
||||
i = handle_table_get_next_handle(stw_dev->ctx_table, i);
|
||||
}
|
||||
handle_table_destroy(stw_dev->ctx_table);
|
||||
}
|
||||
dhglrc = handle_table_get_first_handle(stw_dev->ctx_table);
|
||||
pipe_mutex_unlock( stw_dev->ctx_mutex );
|
||||
if (dhglrc) {
|
||||
debug_printf("%s: contexts still active -- cleanup aborted\n", __FUNCTION__);
|
||||
return;
|
||||
}
|
||||
|
||||
handle_table_destroy(stw_dev->ctx_table);
|
||||
|
||||
stw_framebuffer_cleanup();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue