package/source/zipapi/XBufferedThreadedStream.cxx |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

New commits:
commit c573a10a6a873af11c25fef59a374a37fe76056f
Author: Michael Meeks <michael.me...@collabora.com>
Date:   Tue Jun 13 13:41:15 2017 +0100

    Avoid race between mbTerminate check and wait.
    
            package2.dll!osl::Thread::join() Line 112       C++
            package2.dll!XBufferedThreadedStream::~XBufferedThreadedStream() 
Line 68        C++
            package2.dll!XBufferedThreadedStream::`scalar deleting 
destructor'(unsigned int)        C++
    vs.
            package2.dll!std::condition_variable::wait<bool <lambda>(void) >...
            package2.dll!XBufferedThreadedStream::produce() Line 95 C++
            package2.dll!`anonymous namespace'::UnzippingThread::execute() Line 
29  C++
    
    Change-Id: Iace86efc5e7fe00a5176380a8a21b2dc5e98d8a5
    Reviewed-on: https://gerrit.libreoffice.org/38737
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/package/source/zipapi/XBufferedThreadedStream.cxx 
b/package/source/zipapi/XBufferedThreadedStream.cxx
index b8ae6e644e25..990844af0bd7 100644
--- a/package/source/zipapi/XBufferedThreadedStream.cxx
+++ b/package/source/zipapi/XBufferedThreadedStream.cxx
@@ -90,12 +90,11 @@ void XBufferedThreadedStream::produce()
         aGuard.lock();
         maPendingBuffers.push( pProducedBuffer );
         maBufferConsumeResume.notify_one();
-        maBufferProduceResume.wait( aGuard, [&]{return canProduce(); } );
 
-        if( mbTerminateThread )
-            break;
+        if (!mbTerminateThread)
+            maBufferProduceResume.wait( aGuard, [&]{return canProduce(); } );
 
-    } while( hasBytes() );
+    } while( !mbTerminateThread && hasBytes() );
 }
 
 /**
@@ -134,6 +133,7 @@ const Buffer& XBufferedThreadedStream::getNextBlock()
 
 void XBufferedThreadedStream::setTerminateThread()
 {
+    std::unique_lock<std::mutex> aGuard( maBufferProtector );
     mbTerminateThread = true;
     maBufferProduceResume.notify_one();
     maBufferConsumeResume.notify_one();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to