diff --git a/src/fastqreader.cpp b/src/fastqreader.cpp index e65ea21c..e4b8f0ed 100644 --- a/src/fastqreader.cpp +++ b/src/fastqreader.cpp @@ -420,16 +420,12 @@ FastqReaderPair::~FastqReaderPair(){ } } -ReadPair* FastqReaderPair::read(){ +void FastqReaderPair::read(ReadPair* pair){ Read* l = mLeft->read(); Read* r = NULL; if(mInterleaved) r = mLeft->read(); else r = mRight->read(); - if(!l || !r){ - return NULL; - } else { - return new ReadPair(l, r); - } + pair->setPair(l, r); } diff --git a/src/fastqreader.h b/src/fastqreader.h index fe65dca3..617a08d7 100644 --- a/src/fastqreader.h +++ b/src/fastqreader.h @@ -91,7 +91,8 @@ class FastqReaderPair{ FastqReaderPair(FastqReader* left, FastqReader* right); FastqReaderPair(string leftName, string rightName, bool hasQuality = true, bool phred64 = false, bool interleaved = false); ~FastqReaderPair(); - ReadPair* read(); + void read(ReadPair* pair); + bool eof(); public: FastqReader* mLeft; FastqReader* mRight; diff --git a/src/peprocessor.cpp b/src/peprocessor.cpp index 8ff63b9b..6a60272a 100644 --- a/src/peprocessor.cpp +++ b/src/peprocessor.cpp @@ -681,8 +681,8 @@ bool PairEndProcessor::processPairEnd(ReadPack* leftPack, ReadPack* rightPack, T if(overlappedOut) delete overlappedOut; - delete leftPack->data; - delete rightPack->data; + delete[] leftPack->data; + delete[] rightPack->data; delete leftPack; delete rightPack; @@ -870,10 +870,11 @@ void PairEndProcessor::interleavedReaderTask() FastqReaderPair reader(mOptions->in1, mOptions->in2, true, mOptions->phred64,true); int count=0; bool needToBreak = false; + ReadPair* pair = new ReadPair(); while(true){ - ReadPair* pair = reader.read(); + reader.read(pair); // TODO: put needToBreak here is just a WAR for resolve some unidentified dead lock issue - if(!pair || needToBreak){ + if(pair->eof() || needToBreak){ // the last pack ReadPack* packLeft = new ReadPack; ReadPack* packRight = new ReadPack; @@ -890,10 +891,6 @@ void PairEndProcessor::interleavedReaderTask() dataLeft = NULL; dataRight = NULL; - if(pair) { - delete pair; - pair = NULL; - } break; } dataLeft[count] = pair->mLeft; @@ -962,6 +959,8 @@ void PairEndProcessor::interleavedReaderTask() } } + delete pair; + for(int t=0; tthread; t++) { mLeftInputLists[t]->setProducerFinished(); mRightInputLists[t]->setProducerFinished(); diff --git a/src/read.cpp b/src/read.cpp index c155784d..695649c5 100644 --- a/src/read.cpp +++ b/src/read.cpp @@ -197,9 +197,9 @@ bool Read::test(){ return idx == "GGTCCCGA"; } -ReadPair::ReadPair(Read* left, Read* right){ - mLeft = left; - mRight = right; +ReadPair::ReadPair(){ + mLeft = NULL; + mRight = NULL; } ReadPair::~ReadPair(){ @@ -213,6 +213,15 @@ ReadPair::~ReadPair(){ } } +void ReadPair::setPair(Read* left, Read* right){ + mLeft = left; + mRight = right; +} + +bool ReadPair::eof(){ + return mLeft == NULL || mRight == NULL; +} + Read* ReadPair::fastMerge(){ Read* rcRight = mRight->reverseComplement(); int len1 = mLeft->length(); @@ -297,7 +306,8 @@ bool ReadPair::test(){ new string("+"), new string("AAAAA6EEEEE/EEEEEEEEEEE#EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE")); - ReadPair pair(left, right); + ReadPair pair; + pair.setPair(left, right); Read* merged = pair.fastMerge(); if(merged == NULL) return false; diff --git a/src/read.h b/src/read.h index 3d79d5eb..83b2b246 100644 --- a/src/read.h +++ b/src/read.h @@ -48,8 +48,10 @@ class Read{ class ReadPair{ public: - ReadPair(Read* left, Read* right); + ReadPair(); ~ReadPair(); + void setPair(Read* left, Read* right); + bool eof(); // merge a pair, without consideration of seq error caused false INDEL Read* fastMerge();