Description
I'm not 100% sure about this, but based on my reading of the code, awaiting a "driver" object from a blob download will effectively block all other activity (like starting new blob downloads, for example).
This is caused by the fact that the skopeo proxy protocol doesn't appear to support tagging (ie: multiple in-flight requests) and we take a lock while sending a request and awaiting a reply. That means if we send FinishPipe, we'll end up waiting (with the lock held) until we get a reply, which will block all other requests on the proxy...
That means that the officially documented way of interacting with the proxy (ie: joining the driver wait with the reading of the pipe) will interact poorly with trying to use the proxy from multiple threads (which was enabled by #78). composefs-rs mostly avoids this fate only because we only ever try to await the driver after we finished reading the entire stream (we use the "take" trick there, with the size from the descriptor). I have seen a few cases where everything seems to serialize up (ie: no new layers starting) after a big read finishes, though, and I have a feeling it's related to this...