Review: http://codereview.appspot.com/3969041/

Fixed dangling pointers in Surface.

When the surface is reset, either because of device lost or a window
resize, and any of these fail:

CreateDepthStencilSurface
CreateTexture

Some subsset of mSwapChain and/or mDepthStencil would be left
uninitialized. This seemed to happen frequently on WIndows XP boxes.

Example crash dumps:

Thread 0 *CRASHED* ( EXCEPTION_ACCESS_VIOLATION_READ @
0xffffffff800f0004 )

0x014f1aac       [libegl.dll     -
surface.cpp:479]        egl::Surface::getDepthStencil()
0x1001324c       [libglesv2.dll  -
context.cpp:301]        gl::Context::makeCurrent(egl::Display *,egl::Surface *)
0x10018c7e       [libglesv2.dll  - main.cpp:85] gl::makeCurrent(gl::Context
*,egl::Display *,egl::Surface *)
0x10017366       [libglesv2.dll  - context.cpp:3524]    glMakeCurrent
0x014f607c       [libegl.dll     - libegl.cpp:884]      eglMakeCurrent

Thread 0 *CRASHED* ( EXCEPTION_ACCESS_VIOLATION_READ @
0xffffffffe95b5a5d )

0x01131a14       [libegl.dll     - surface.cpp:433]     egl::Surface::swap()
0x01136310       [libegl.dll     - libegl.cpp:1043]     eglSwapBuffers
0x0214ac64       [chrome.dll     -
gl_context_egl.cc:240]  gfx::NativeViewEGLContext::SwapBuffers()


git-svn-id: https://angleproject.googlecode.com/svn/trunk@531 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libEGL/Surface.cpp b/src/libEGL/Surface.cpp
index f779e6c..2736a7f 100644
--- a/src/libEGL/Surface.cpp
+++ b/src/libEGL/Surface.cpp
@@ -135,6 +135,7 @@
         ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
 
         ERR("Could not create additional swap chains: %08lX", result);
+        release();
         return error(EGL_BAD_ALLOC);
     }
 
@@ -146,9 +147,8 @@
     {
         ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
 
-        mSwapChain->Release();
-
         ERR("Could not create depthstencil surface for new swap chain: %08lX", result);
+        release();
         return error(EGL_BAD_ALLOC);
     }
 
@@ -161,10 +161,8 @@
     {
         ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY);
 
-        mSwapChain->Release();
-        mDepthStencil->Release();
-
         ERR("Could not create flip texture for new swap chain: %08lX", result);
+        release();
         return error(EGL_BAD_ALLOC);
     }