Index: /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c	(revision 41312)
+++ /trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c	(revision 41313)
@@ -766,5 +766,7 @@
             crStateCleanupTextureRefs(g, tObj);
 
-            crHashtableDelete(g->shared->textureTable, name, crStateDeleteTextureObject);
+            /* on the host side, ogl texture object is deleted by a separate cr_server.head_spu->dispatch_table.DeleteTextures(n, newTextures);
+             * in crServerDispatchDeleteTextures, we just delete a state object here, which crStateDeleteTextureObject does */
+            crHashtableDelete(g->shared->textureTable, name, (CRHashtableCallback)crStateDeleteTextureObject);
         }
     }
@@ -874,5 +876,9 @@
 
         if (!CR_STATE_SHAREDOBJ_USAGE_IS_USED(tobj))
+        {
+            /* on the host side, we need to delete an ogl texture object here as well, which crStateDeleteTextureCallback will do
+             * in addition to calling crStateDeleteTextureObject to delete a state object */
             crHashtableDelete(g->shared->textureTable, texture, crStateDeleteTextureCallback);
+        }
 
         DIRTY(tb->dirty, g->neg_bitid);
