diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2008-05-05 04:00:00 +0400 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:15:55 +0300 |
commit | 3901bf0ab88106a5b031cba7bc18d60cdebf7eef (patch) | |
tree | 808a2489abed822223b118b64e0553db80af6087 /CPP/7zip/Compress/BZip2/BZip2Decoder.cpp | |
parent | bd1fa36322ac27f5715433b388742893d6524516 (diff) |
4.58 beta
Diffstat (limited to 'CPP/7zip/Compress/BZip2/BZip2Decoder.cpp')
-rwxr-xr-x | CPP/7zip/Compress/BZip2/BZip2Decoder.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/CPP/7zip/Compress/BZip2/BZip2Decoder.cpp b/CPP/7zip/Compress/BZip2/BZip2Decoder.cpp index 3f7dbc58..47ffa7c8 100755 --- a/CPP/7zip/Compress/BZip2/BZip2Decoder.cpp +++ b/CPP/7zip/Compress/BZip2/BZip2Decoder.cpp @@ -432,10 +432,12 @@ CDecoder::~CDecoder() Free(); } -HRes CDecoder::Create() +#define RINOK_THREAD(x) { WRes __result_ = (x); if(__result_ != 0) return __result_; } + +HRESULT CDecoder::Create() { - RINOK(CanProcessEvent.CreateIfNotCreated()); - RINOK(CanStartWaitingEvent.CreateIfNotCreated()); + RINOK_THREAD(CanProcessEvent.CreateIfNotCreated()); + RINOK_THREAD(CanStartWaitingEvent.CreateIfNotCreated()); if (m_States != 0 && m_NumThreadsPrev == NumThreads) return S_OK; Free(); @@ -454,7 +456,7 @@ HRes CDecoder::Create() ti.Decoder = this; if (MtMode) { - HRes res = ti.Create(); + HRESULT res = ti.Create(); if (res != S_OK) { NumThreads = t; @@ -524,9 +526,12 @@ HRESULT CDecoder::DecodeFile(bool &isBZ, ICompressProgressInfo *progress) CState &s = m_States[t]; if (!s.Alloc()) return E_OUTOFMEMORY; - s.StreamWasFinishedEvent.Reset(); - s.WaitingWasStartedEvent.Reset(); - s.CanWriteEvent.Reset(); + if (MtMode) + { + RINOK(s.StreamWasFinishedEvent.Reset()); + RINOK(s.WaitingWasStartedEvent.Reset()); + RINOK(s.CanWriteEvent.Reset()); + } } #else if (!m_States[0].Alloc()) @@ -647,12 +652,13 @@ STDMETHODIMP CDecoder::GetInStreamProcessedSize(UInt64 *value) static THREAD_FUNC_DECL MFThread(void *p) { ((CState *)p)->ThreadFunc(); return 0; } -HRes CState::Create() +HRESULT CState::Create() { - RINOK(StreamWasFinishedEvent.CreateIfNotCreated()); - RINOK(WaitingWasStartedEvent.CreateIfNotCreated()); - RINOK(CanWriteEvent.CreateIfNotCreated()); - return Thread.Create(MFThread, this); + RINOK_THREAD(StreamWasFinishedEvent.CreateIfNotCreated()); + RINOK_THREAD(WaitingWasStartedEvent.CreateIfNotCreated()); + RINOK_THREAD(CanWriteEvent.CreateIfNotCreated()); + RINOK_THREAD(Thread.Create(MFThread, this)); + return S_OK; } void CState::FinishStream() |