Browse Source

obs: Remove draw callbacks when closing various windows

Fixes a race condition during shutdown where the dialogs aren't deleted
before another render attempt occurs, by which time the sources are
already freed, resulting in a crash.
Richard Stanway 9 years ago
parent
commit
ccf36b68fc

+ 3 - 0
obs/window-basic-filters.cpp

@@ -394,6 +394,9 @@ void OBSBasicFilters::closeEvent(QCloseEvent *event)
 	if (!event->isAccepted())
 		return;
 
+	obs_display_remove_draw_callback (ui->preview->GetDisplay(),
+		OBSBasicFilters::DrawPreview, this);
+
 	main->SaveProject();
 }
 

+ 3 - 0
obs/window-basic-interaction.cpp

@@ -168,6 +168,9 @@ void OBSBasicInteraction::closeEvent(QCloseEvent *event)
 			width());
 	config_set_int(App()->GlobalConfig(), "InteractionWindow", "cy",
 			height());
+
+	obs_display_remove_draw_callback(ui->preview->GetDisplay(),
+		OBSBasicInteraction::DrawPreview, this);
 }
 
 static int TranslateQtKeyboardEventModifiers(QInputEvent *event, bool mouseEvent) {

+ 3 - 0
obs/window-basic-properties.cpp

@@ -205,6 +205,9 @@ void OBSBasicProperties::Cleanup()
 			width());
 	config_set_int(App()->GlobalConfig(), "PropertiesWindow", "cy",
 			height());
+
+	obs_display_remove_draw_callback(preview->GetDisplay(),
+		OBSBasicProperties::DrawPreview, this);
 }
 
 void OBSBasicProperties::reject()