summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsin <sin@2f30.org>2014-10-08 20:52:33 +0100
committersin <sin@2f30.org>2014-10-08 20:52:33 +0100
commit2e31429e333c10d4d6a94b57d4d6c8d46ccf7a2d (patch)
treeac6b432df45c4b42331b8886baf10c5d665c5ac2
parent68bfca6e6ec56f7eda1a08b6cb7316ce0d8bc425 (diff)
Don't close a random fd
if (f->rxstate == TRANSFER_INPROGRESS && (fd = openat(f->dirfd, ffiles[FFILE_OUT].name, ffiles[FFILE_OUT].flags, 0666)) == -1 && errno == ENXIO) { ... } else { close(fd); <--- not always appropriate! }
-rw-r--r--ratox.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/ratox.c b/ratox.c
index 7eaeb2e..de07738 100644
--- a/ratox.c
+++ b/ratox.c
@@ -1687,10 +1687,12 @@ loop(void)
canceltxtransfer(f);
cancelrxtransfer(f);
}
- if (f->rxstate == TRANSFER_INPROGRESS &&
- (fd = openat(f->dirfd, ffiles[FFILE_OUT].name, ffiles[FFILE_OUT].flags, 0666)) == -1 &&
- errno == ENXIO) {
- cancelrxtransfer(f);
+ if (f->rxstate != TRANSFER_INPROGRESS)
+ continue;
+ fd = openat(f->dirfd, ffiles[FFILE_OUT].name, ffiles[FFILE_OUT].flags, 0666);
+ if (fd < 0) {
+ if (errno == ENXIO)
+ cancelrxtransfer(f);
} else {
close(fd);
}