]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
AliHLTTask: improve consistency check for generated output data (allow ptr be set...
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Aug 2008 15:12:38 +0000 (15:12 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Aug 2008 15:12:38 +0000 (15:12 +0000)
HLT/BASE/AliHLTDataBuffer.cxx
HLT/BASE/AliHLTTask.cxx

index 0e2d58b20bc65604ba565f13ba4697f7b9ed9b85..834c0522e999a822759c6975a47ebdfd3fc6dc0a 100644 (file)
@@ -369,7 +369,8 @@ int AliHLTDataBuffer::SetSegments(AliHLTUInt8_t* pTgt, AliHLTComponentBlockData*
          if (arrayBlockData[i].fPtr==NULL ||
              arrayBlockData[i].fPtr==*fpBuffer) {
            arrayBlockData[i].fPtr=*fpBuffer;
-           if (arrayBlockData[i].fOffset+arrayBlockData[i].fSize<=fpBuffer->GetUsedSize()) {
+           if ((arrayBlockData[i].fOffset+arrayBlockData[i].fSize<=fpBuffer->GetUsedSize()) ||
+               ((arrayBlockData[i].fOffset==~(AliHLTUInt32_t)0) && arrayBlockData[i].fSize==0)) {
              segment.fSegmentOffset=arrayBlockData[i].fOffset;
              segment.fPtr=(AliHLTUInt8_t*)arrayBlockData[i].fPtr;
              segment.fSegmentSize=arrayBlockData[i].fSize;
index eaae250b6b2352cb2b63a41b1b6e126d384c4398..da8ffbdc448389f77379c9aa9677d3f5b6a5b441 100644 (file)
@@ -588,7 +588,8 @@ int AliHLTTask::ProcessTask(Int_t eventNo, AliHLTUInt32_t eventType)
            AliHLTComponentBlockDataList segments;
            for (AliHLTUInt32_t oblock=0; oblock<outputBlockCnt; oblock++) {
              // consistency check for data reference
-             if (outputBlocks[oblock].fPtr!=NULL && outputBlocks[oblock].fOffset!=0) {
+             if (outputBlocks[oblock].fPtr!=NULL && outputBlocks[oblock].fPtr!=pTgtBuffer &&
+                 outputBlocks[oblock].fOffset!=0) {
                HLTWarning("output block %s 0x%08x has inconsistent data reference ptr=%p offset=0x%08x: "
                           "for new blocks use offset only, forwarded blocks have fPtr set only",
                           AliHLTComponent::DataType2Text(outputBlocks[oblock].fDataType).c_str(),
@@ -599,7 +600,8 @@ int AliHLTTask::ProcessTask(Int_t eventNo, AliHLTUInt32_t eventType)
              // check for duplicates in the output
              AliHLTUInt32_t checkblock=0;
              for (; checkblock<oblock; checkblock++) {
-               if (outputBlocks[oblock].fPtr!=NULL && outputBlocks[checkblock].fPtr==outputBlocks[oblock].fPtr) {
+               if (outputBlocks[oblock].fPtr!=NULL && outputBlocks[oblock].fPtr!=pTgtBuffer &&
+                   outputBlocks[checkblock].fPtr==outputBlocks[oblock].fPtr) {
                  if (outputBlocks[checkblock].fSize!=outputBlocks[oblock].fSize ||
                      outputBlocks[checkblock].fDataType!=outputBlocks[oblock].fDataType) {
                    HLTWarning("output blocks %d (%s 0x%08x) and %d (%s 0x%08x) have identical data references ptr=%p "
@@ -627,6 +629,9 @@ int AliHLTTask::ProcessTask(Int_t eventNo, AliHLTUInt32_t eventType)
              // when the subscribing task releases it
              AliHLTUInt32_t iblock=0;
              for (; iblock<fBlockDataArray.size(); iblock++) {
+               if (outputBlocks[oblock].fDataType==kAliHLTDataTypeEvent) {
+                 // the event type data block is ignored if it was forwarded
+               }
                if (fBlockDataArray[iblock].fPtr==outputBlocks[oblock].fPtr) {
                  assert(subscribedTaskList[iblock]!=NULL);
                  if (subscribedTaskList[iblock]==NULL) continue;