diff options
author | sin <sin@2f30.org> | 2014-10-08 20:52:33 +0100 |
---|---|---|
committer | sin <sin@2f30.org> | 2014-10-08 20:52:33 +0100 |
commit | 2e31429e333c10d4d6a94b57d4d6c8d46ccf7a2d (patch) | |
tree | ac6b432df45c4b42331b8886baf10c5d665c5ac2 /ratox.c | |
parent | 68bfca6e6ec56f7eda1a08b6cb7316ce0d8bc425 (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!
}
Diffstat (limited to 'ratox.c')
-rw-r--r-- | ratox.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -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); } |