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()[
binaryDataSize += data.size();
}
- ++parsedCalls;
-
delete call;
if (apiCall->flags() & trace::CALL_FLAG_END_FRAME) {
}
}
- 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;
call = *itr;
}
}
- Q_ASSERT(call);
- emit foundCallIndex(call);
+ if (call) {
+ emit foundCallIndex(call);
+ }
}
void TraceLoader::search(const ApiTrace::SearchRequest &request)