glave: Fix xglCreateDevice replay code to not modify packet.
authorJon Ashburn <jon@lunarg.com>
Fri, 19 Dec 2014 19:31:19 +0000 (12:31 -0700)
committerCourtney Goeltzenleuchter <courtney@LunarG.com>
Thu, 5 Feb 2015 00:58:06 +0000 (17:58 -0700)
Fixes sporadic  crashes on multiple replays.

glave-generate.py

index d65aafbd20f78557bfe4a20c52fab0592a261bcd..dfac7168db62c955b425a5d40f1b70bb5b4a7396 100755 (executable)
@@ -2109,10 +2109,11 @@ class Subcommand(object):
         cd_body.append('                XGL_DEVICE device;')
         cd_body.append('                if (m_debugLevel > 0)')
         cd_body.append('                {')
-        cd_body.append('                    XGL_DEVICE_CREATE_INFO cInfo, *ci;')
+        cd_body.append('                    XGL_DEVICE_CREATE_INFO cInfo, *ci, *pCreateInfoSaved;')
         cd_body.append('                    // TODO what is the real list of layers to be running with??')
         cd_body.append('                    const XGL_CHAR * layersStr[2] = {(XGL_CHAR *) "DrawState", (XGL_CHAR *) "ObjectTracker"};')
         cd_body.append('                    XGL_LAYER_CREATE_INFO layerInfo;')
+        cd_body.append('                    pCreateInfoSaved = (XGL_DEVICE_CREATE_INFO *) pPacket->pCreateInfo;')
         cd_body.append('                    ci = (XGL_DEVICE_CREATE_INFO *) pPacket->pCreateInfo;')
         cd_body.append('                    while (ci->pNext != NULL)')
         cd_body.append('                        ci = (XGL_DEVICE_CREATE_INFO *) ci->pNext;')
@@ -2126,6 +2127,9 @@ class Subcommand(object):
         cd_body.append('                    cInfo.maxValidationLevel = (XGL_VALIDATION_LEVEL)((m_debugLevel <= 4) ? XGL_VALIDATION_LEVEL_0 + m_debugLevel : XGL_VALIDATION_LEVEL_0);')
         cd_body.append('                    pPacket->pCreateInfo = &cInfo;')
         cd_body.append('                    replayResult = m_xglFuncs.real_xglCreateDevice(remap(pPacket->gpu), pPacket->pCreateInfo, &device);')
+        cd_body.append('                    // restore the packet for next replay')
+        cd_body.append('                    ci->pNext = NULL;')
+        cd_body.append('                    pPacket->pCreateInfo = pCreateInfoSaved;')
         cd_body.append('                    if (xglDbgRegisterMsgCallback(g_fpDbgMsgCallback, NULL) != XGL_SUCCESS)')
         cd_body.append('                        glv_LogError("Failed to register xgl callback for replayer error handling\\n");')
         cd_body.append('                }')