diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c index 1b4015de..5492c59d 100644 --- a/src/sna/sna_driver.c +++ b/src/sna/sna_driver.c @@ -945,14 +945,16 @@ static void sna_leave_vt(VT_FUNC_ARGS_DECL) SCRN_INFO_PTR(arg); struct sna *sna = to_sna(scrn); - DBG(("%s\n", __FUNCTION__)); + DBG(("%s(vtSema=%d)\n", __FUNCTION__, scrn->vtSema)); sna_mode_reset(sna); sna_accel_leave(sna); - if (intel_put_master(sna->dev)) + if (scrn->vtSema && intel_put_master(sna->dev)) xf86DrvMsg(scrn->scrnIndex, X_WARNING, "drmDropMaster failed: %s\n", strerror(errno)); + + scrn->vtSema = FALSE; } static Bool sna_early_close_screen(CLOSE_SCREEN_ARGS_DECL) @@ -1272,10 +1274,11 @@ static Bool sna_enter_vt(VT_FUNC_ARGS_DECL) SCRN_INFO_PTR(arg); struct sna *sna = to_sna(scrn); - DBG(("%s\n", __FUNCTION__)); + DBG(("%s(vtSema=%d)\n", __FUNCTION__, scrn->vtSema)); if (intel_get_master(sna->dev)) return FALSE; + scrn->vtSema = TRUE; sna_accel_enter(sna); if (sna->flags & SNA_REPROBE) {