Fix race condition in qpTestLog debug asserts
authorPyry Haulos <phaulos@google.com>
Thu, 11 Aug 2016 19:44:33 +0000 (12:44 -0700)
committerPyry Haulos <phaulos@google.com>
Thu, 11 Aug 2016 19:50:37 +0000 (12:50 -0700)
Code should be holding log mutex when checking state of internal data
structure.

Change-Id: I01f8aa851407c58813880a73c13f1966fdb1a2d1

framework/qphelper/qpTestLog.c

index 722d79e..5b1ee74 100644 (file)
@@ -453,10 +453,11 @@ deBool qpTestLog_endCase (qpTestLog* log, qpTestResult result, const char* resul
        const char*             statusStr               = QP_LOOKUP_STRING(s_qpTestResultMap, result);
        qpXmlAttribute  statusAttrib    = qpSetStringAttrib("StatusCode", statusStr);
 
-       DE_ASSERT(log && log->isCaseOpen);
-       DE_ASSERT(ContainerStack_isEmpty(&log->containerStack));
        deMutex_lock(log->lock);
 
+       DE_ASSERT(log->isCaseOpen);
+       DE_ASSERT(ContainerStack_isEmpty(&log->containerStack));
+
        /* <Result StatusCode="Pass">Result details</Result>
         * </TestCaseResult>
         */
@@ -1030,10 +1031,11 @@ deBool qpTestLog_writeShader (qpTestLog* log, qpShaderType type, const char* sou
        int                             numShaderAttribs        = 0;
        qpXmlAttribute  shaderAttribs[4];
 
-       DE_ASSERT(log && source);
-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
        deMutex_lock(log->lock);
 
+       DE_ASSERT(source);
+       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
+
        shaderAttribs[numShaderAttribs++]       = qpSetStringAttrib("CompileStatus", compileOk ? "OK" : "Fail");
 
        if (!qpXmlWriter_startElement(log->writer, tagName, numShaderAttribs, shaderAttribs) ||
@@ -1242,9 +1244,10 @@ deBool qpTestLog_writeSpirVAssemblySource (qpTestLog* log, const char* source)
 {
        const char* const       sourceStr       = (log->flags & QP_TEST_LOG_EXCLUDE_SHADER_SOURCES) != 0 ? "" : source;
 
-       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
        deMutex_lock(log->lock);
 
+       DE_ASSERT(ContainerStack_getTop(&log->containerStack) == CONTAINERTYPE_SHADERPROGRAM);
+
        if (!qpXmlWriter_writeStringElement(log->writer, "SpirVAssemblySource", sourceStr))
        {
                qpPrintf("qpTestLog_writeSpirVAssemblySource(): Writing XML failed\n");