X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Ftraceloader.cpp;h=6110c5972d6416752bc82a1c0472812625907549;hb=HEAD;hp=2ad32b1fb4d73523dc4219650ee5ac6cd93a85d6;hpb=e7cb2b98575d5ff3801bd3527a648e0dbfdebdad;p=apitrace diff --git a/gui/traceloader.cpp b/gui/traceloader.cpp index 2ad32b1..6110c59 100644 --- a/gui/traceloader.cpp +++ b/gui/traceloader.cpp @@ -410,8 +410,9 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) ApiTraceCall *apiCall = apiCallFromTraceCall(call, m_helpHash, currentFrame, this); - calls[parsedCalls] = apiCall; - Q_ASSERT(calls[parsedCalls]); + Q_ASSERT(apiCall); + Q_ASSERT(parsedCalls < calls.size()); + calls[parsedCalls++] = apiCall; if (apiCall->hasBinaryData()) { QByteArray data = apiCall->arguments()[ @@ -419,8 +420,6 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) binaryDataSize += data.size(); } - ++parsedCalls; - delete call; if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) { @@ -428,11 +427,14 @@ TraceLoader::fetchFrameContents(ApiTraceFrame *currentFrame) } } - assert(parsedCalls == numOfCalls); - Q_ASSERT(parsedCalls == calls.size()); + // There can be fewer parsed calls when call in different + // threads cross the frame boundary + Q_ASSERT(parsedCalls <= numOfCalls); + Q_ASSERT(parsedCalls <= calls.size()); + calls.resize(parsedCalls); calls.squeeze(); - Q_ASSERT(parsedCalls == currentFrame->numChildrenToLoad()); + Q_ASSERT(parsedCalls <= currentFrame->numChildrenToLoad()); emit frameContentsLoaded(currentFrame, calls, binaryDataSize); return calls; @@ -469,8 +471,9 @@ void TraceLoader::findCallIndex(int index) call = *itr; } } - Q_ASSERT(call); - emit foundCallIndex(call); + if (call) { + emit foundCallIndex(call); + } } void TraceLoader::search(const ApiTrace::SearchRequest &request)