mirror of
https://github.com/restic/restic.git
synced 2025-03-13 20:31:22 +00:00

This is a fix for the following situation (gh-1188): List() grabs a semaphore token upon entry, starts a goroutine, and does not release the token until the routine exits (via a defer). The goroutine iterates over the results from ListCurrentObjects(), sending them one at a time to a channel, where they are ultimately processed by be.Load(). Since be.Load() also needs a token, this will result in deadlock if b2.connections=1. This fix changes List() so that the token is only held during the call to ListCurrentObjects().