| 663 | } |
| 664 | |
| 665 | Status UnlockFile(FileLock* lock) override { |
| 666 | PosixFileLock* posix_file_lock = static_cast<PosixFileLock*>(lock); |
| 667 | if (LockOrUnlock(posix_file_lock->fd(), false) == -1) { |
| 668 | return PosixError("unlock " + posix_file_lock->filename(), errno); |
| 669 | } |
| 670 | locks_.Remove(posix_file_lock->filename()); |
| 671 | ::close(posix_file_lock->fd()); |
| 672 | delete posix_file_lock; |
| 673 | return Status::OK(); |
| 674 | } |
| 675 | |
| 676 | void Schedule(void (*background_work_function)(void* background_work_arg), |
| 677 | void* background_work_arg) override; |