diff --git a/gfx/angle/src/libGLESv2/IndexDataManager.cpp b/gfx/angle/src/libGLESv2/IndexDataManager.cpp
--- a/gfx/angle/src/libGLESv2/IndexDataManager.cpp
+++ b/gfx/angle/src/libGLESv2/IndexDataManager.cpp
@@ -375,17 +375,18 @@ void StreamingIndexBuffer::reserveSpace(
     
         if (FAILED(result))
         {
             ERR("Out of memory allocating a vertex buffer of size %lu.", mBufferSize);
         }
 
         mWritePosition = 0;
     }
-    else if (mWritePosition + requiredSpace > mBufferSize)   // Recycle
+    else if (mWritePosition + requiredSpace > mBufferSize ||
+             mWritePosition + requiredSpace < mWritePosition)   // Recycle
     {
         void *dummy;
         mIndexBuffer->Lock(0, 1, &dummy, D3DLOCK_DISCARD);
         mIndexBuffer->Unlock();
 
         mWritePosition = 0;
     }
 }

