Report errors if calls to `close()` fail

This commit is contained in:
rdb 2024-01-25 12:33:20 +01:00
parent 8c74919a8b
commit b49dbaca2b
4 changed files with 43 additions and 11 deletions

View File

@ -2287,7 +2287,9 @@ touch() const {
perror(os_specific.c_str());
return false;
}
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return true;
}
perror(os_specific.c_str());
@ -2736,7 +2738,9 @@ atomic_compare_and_exchange_contents(string &orig_contents,
if (flock(fd, LOCK_EX) != 0) {
#endif
perror(os_specific.c_str());
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return false;
}
@ -2748,7 +2752,9 @@ atomic_compare_and_exchange_contents(string &orig_contents,
if (bytes_read < 0) {
perror(os_specific.c_str());
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return false;
}
@ -2759,7 +2765,9 @@ atomic_compare_and_exchange_contents(string &orig_contents,
ssize_t bytes_written = write(fd, new_contents.data(), new_contents.size());
if (bytes_written < 0) {
perror(os_specific.c_str());
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return false;
}
}
@ -2852,7 +2860,9 @@ atomic_read_contents(string &contents) const {
if (flock(fd, LOCK_EX) != 0) {
#endif
perror(os_specific.c_str());
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return false;
}
@ -2864,11 +2874,15 @@ atomic_read_contents(string &contents) const {
if (bytes_read < 0) {
perror(os_specific.c_str());
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return false;
}
close(fd);
if (close(fd) < 0) {
perror(os_specific.c_str());
}
return true;
#endif // WIN32_VC
}

View File

@ -267,7 +267,15 @@ close() {
_handle = nullptr;
#else
if (_fd != -1) {
::close(_fd);
if (::close(_fd) < 0) {
#ifdef NDEBUG
perror("close");
#else
char *str = (char *)alloca(_filename.size() + 32);
sprintf(str, "close(%d \"%s\")", _fd, _filename.c_str());
perror(str);
#endif
}
}
_fd = -1;
#endif // _WIN32

View File

@ -82,7 +82,11 @@ private:
inline bool Socket_IP::
ErrorClose() {
if (Active()) {
DO_CLOSE(_socket);
if (DO_CLOSE(_socket) != 0) {
#ifndef _WIN32
perror("Socket_IP::ErrorClose");
#endif
}
}
_socket = BAD_SOCKET;
@ -127,7 +131,11 @@ inline Socket_IP::
inline void Socket_IP::
Close() {
if (Active()) {
DO_CLOSE(_socket);
if (DO_CLOSE(_socket) != 0) {
#ifndef _WIN32
perror("Socket_IP::ErrorClose");
#endif
}
}
_socket = BAD_SOCKET;

View File

@ -359,7 +359,9 @@ static int setup_logging(const char *path, int append) {
dup2(fd, 1);
dup2(fd, 2);
close(fd);
if (close(fd) < 0) {
perror("setup_logging: close");
}
return 1;
#endif
}