             }
 
             becomeCurrent(withPendingUnitCount: pendingUnitCount)
-            _ = ProxyProgress(cloning: progress)
-
-            if !changedPendingUnitCount {
-                resignCurrent()
+
+            let progress = ProxyProgress(cloning: progress)
+            progress.attach()
+
+            withExtendedLifetime(progress) {
+                if !changedPendingUnitCount {
+                    resignCurrent()
+                }
             }
         }
     }

    init(cloning original: Progress) {
        self.original = original
        super.init(parent: .current(), userInfo: nil)
        attach()
    }

    deinit {

        }

        let queue = DispatchQueue.global(qos: .background)
        future.upon(queue) { _ in
            progress.totalUnitCount = 1
            progress.completedUnitCount = 1
        }

        return progress
