From 9ba6258478e16b51726ae0ce61e3e973e5d7d243 Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 18 Jun 2014 20:34:05 +0200 Subject: [PATCH] Made context creation exception-safe Former-commit-id: d55687cea712a34e905b3f2f2d85611d1d0b1b74 --- src/Nazara/Renderer/Win32/ContextImpl.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Nazara/Renderer/Win32/ContextImpl.cpp b/src/Nazara/Renderer/Win32/ContextImpl.cpp index ee78e81a6..1ae61bd3e 100644 --- a/src/Nazara/Renderer/Win32/ContextImpl.cpp +++ b/src/Nazara/Renderer/Win32/ContextImpl.cpp @@ -5,6 +5,7 @@ // Code inspiré de NeHe (Lesson1) et de la SFML par Laurent Gomila #include +#include #include #include #include @@ -42,11 +43,16 @@ bool NzContextImpl::Create(NzContextParameters& parameters) m_ownsWindow = true; } + // En cas d'exception, la ressource sera quand même libérée + NzCallOnExit onExit([this] () + { + Destroy(); + }); + m_deviceContext = GetDC(m_window); if (!m_deviceContext) { NazaraError("Failed to get device context"); - Destroy(); return false; } @@ -116,8 +122,6 @@ bool NzContextImpl::Create(NzContextParameters& parameters) if (pixelFormat == 0) { NazaraError("Failed to choose pixel format"); - Destroy(); - return false; } } @@ -125,7 +129,6 @@ bool NzContextImpl::Create(NzContextParameters& parameters) if (!SetPixelFormat(m_deviceContext, pixelFormat, &descriptor)) { NazaraError("Failed to set pixel format"); - Destroy(); return false; } @@ -191,10 +194,11 @@ bool NzContextImpl::Create(NzContextParameters& parameters) if (!m_context) { NazaraError("Failed to create context"); - Destroy(); return false; } + onExit.Reset(); + return true; }