close the file handle returning EBADF if it has been closed already. Must be called with fh.mu held
()
| 185 | // |
| 186 | // Must be called with fh.mu held |
| 187 | func (fh *WriteFileHandle) close() (err error) { |
| 188 | if fh.closed { |
| 189 | return ECLOSED |
| 190 | } |
| 191 | fh.closed = true |
| 192 | // leave writer open until file is transferred |
| 193 | defer func() { |
| 194 | fh.file.delWriter(fh) |
| 195 | }() |
| 196 | // If file not opened and not safe to truncate then leave file intact |
| 197 | if !fh.opened && !fh.safeToTruncate() { |
| 198 | return nil |
| 199 | } |
| 200 | if err = fh.openPending(); err != nil { |
| 201 | return err |
| 202 | } |
| 203 | writeCloseErr := fh.pipeWriter.Close() |
| 204 | err = <-fh.result |
| 205 | if err == nil { |
| 206 | fh.file.setObject(fh.o) |
| 207 | err = writeCloseErr |
| 208 | } else if fh.file.getObject() == nil { |
| 209 | // Remove vfs file entry when no object is present |
| 210 | _ = fh.file.Remove() |
| 211 | } |
| 212 | return err |
| 213 | } |
| 214 | |
| 215 | // Close closes the file |
| 216 | func (fh *WriteFileHandle) Close() error { |
no test coverage detected