From c44c68ed4c306872bfe2e5a73f6f893fe5ea1fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Fri, 7 Apr 2017 20:02:31 -0700 Subject: [PATCH] Release memory inside any function that takes Memory argument and it could fail when out of handles. --- src/bgfx_p.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/bgfx_p.h b/src/bgfx_p.h index b49b4eaed..280d45f53 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -2372,6 +2372,10 @@ namespace bgfx cmdbuf.write(_mem); cmdbuf.write(_flags); } + else + { + release(_mem); + } return handle; } @@ -2420,6 +2424,10 @@ namespace bgfx cmdbuf.write(declHandle); cmdbuf.write(_flags); } + else + { + release(_mem); + } return handle; } @@ -2526,10 +2534,16 @@ namespace bgfx BX_CHECK(0 == (_flags & BGFX_BUFFER_COMPUTE_READ_WRITE), "Cannot initialize compute buffer from CPU."); const uint32_t indexSize = 0 == (_flags & BGFX_BUFFER_INDEX32) ? 2 : 4; DynamicIndexBufferHandle handle = createDynamicIndexBuffer(_mem->size/indexSize, _flags); + if (isValid(handle) ) { updateDynamicIndexBuffer(handle, 0, _mem); } + else + { + release(_mem); + } + return handle; } @@ -2679,10 +2693,16 @@ namespace bgfx { uint32_t numVertices = _mem->size/_decl.m_stride; DynamicVertexBufferHandle handle = createDynamicVertexBuffer(numVertices, _decl, _flags); + if (isValid(handle) ) { updateDynamicVertexBuffer(handle, 0, _mem); } + else + { + release(_mem); + } + return handle; } @@ -2955,6 +2975,7 @@ namespace bgfx if (!err.isOk() ) { ShaderHandle invalid = BGFX_INVALID_HANDLE; + release(_mem); return invalid; } @@ -2969,6 +2990,7 @@ namespace bgfx , ( (uint8_t*)&magic)[3] ); ShaderHandle invalid = BGFX_INVALID_HANDLE; + release(_mem); return invalid; } @@ -3033,6 +3055,10 @@ namespace bgfx cmdbuf.write(handle); cmdbuf.write(_mem); } + else + { + release(_mem); + } return handle; } @@ -3295,6 +3321,10 @@ namespace bgfx cmdbuf.write(_flags); cmdbuf.write(_skip); } + else + { + release(_mem); + } return handle; }