about summary refs log tree commit diff
path: root/src/libstore/download.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-07-31T15·26+0200
committerEelco Dolstra <edolstra@gmail.com>2018-07-31T15·26+0200
commit4b4adbc93dafcd020d9d79b2d9e376a80c6f5fef (patch)
tree7694676b3613af1143ee9b37e8610ac1bce6aeb4 /src/libstore/download.cc
parentd9e8ab0ff25979baa5b3c852f6a5aeb7b9d2ed36 (diff)
Fix race downloading into a sink
This fixes 'error 10 while decompressing xz file'.

https://hydra.nixos.org/build/78308551
Diffstat (limited to 'src/libstore/download.cc')
-rw-r--r--src/libstore/download.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index 07acd5d0e004..ecec0f205b62 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -718,15 +718,17 @@ void Downloader::download(DownloadRequest && request, Sink & sink)
     while (true) {
         checkInterrupt();
 
-        if (state->quit) {
-            if (state->exc) std::rethrow_exception(state->exc);
-            break;
-        }
-
         /* If no data is available, then wait for the download thread
            to wake us up. */
-        if (state->data.empty())
+        if (state->data.empty()) {
+
+            if (state->quit) {
+                if (state->exc) std::rethrow_exception(state->exc);
+                break;
+            }
+
             state.wait(state->avail);
+        }
 
         /* If data is available, then flush it to the sink and wake up
            the download thread if it's blocked on a full buffer. */