return
        }
        // Ensure the file is writable
-       err = os.Chmod(f.safeOsPath, info.Mode().Perm()|(filePerm&0o222))
+       err = os.Chmod(me.pathForWrite(f), info.Mode().Perm()|(filePerm&0o222))
        if err != nil {
                err = fmt.Errorf("setting file writable: %w", err)
                return
 
        // to return if the data has been lost.
        if off < p.mip.Length() {
                if err == io.EOF {
+                       // TODO: Hey, this guy over here isn't checking errors.
                        p.MarkNotComplete()
                }
        }
 
                                }
                        }
                }
+
+               // This pattern is copied from MarkComplete above. Note the pattern.
+               t.cl.unlock()
+               p.race++
+               err := p.Storage().MarkNotComplete()
+               if err != nil {
+                       t.slogger().Error("error marking piece not complete", "piece", piece, "err", err)
+               }
+               t.cl.lock()
+               if t.closed.IsSet() {
+                       return
+               }
+
                t.onIncompletePiece(piece)
-               p.Storage().MarkNotComplete()
        }
        t.updatePieceCompletion(piece)
 }