Manually calling `G.progress_lock.release()` is error-prone as it's not called when an exception is raised while the lock is acquired.
Manually calling `G.progress_lock.release()` is error-prone as it's not called when an exception is raised while the lock is acquired.