sd-daemon: fix sd_is_mq for non-mq fds
mq_getattr returns -1/EBADF for file descriptors which are not mq. But we should return 0 in this case. We first check that fd is a valid fd, so we can assume that if mq_getattr returns EBADF, it is simply a non-mq fd. There is a slight race, but there doesn't seem to be a nice way to fix it.
This commit is contained in:
@@ -310,10 +310,15 @@ _public_ int sd_is_socket_unix(int fd, int type, int listening, const char *path
|
||||
_public_ int sd_is_mq(int fd, const char *path) {
|
||||
struct mq_attr attr;
|
||||
|
||||
assert_return(fd >= 0, -EBADF);
|
||||
/* Check that the fd is valid */
|
||||
assert_return(fcntl(fd, F_GETFD) >= 0, -errno);
|
||||
|
||||
if (mq_getattr(fd, &attr) < 0)
|
||||
if (mq_getattr(fd, &attr) < 0) {
|
||||
if (errno == EBADF)
|
||||
/* A non-mq fd (or an invalid one, but we ruled that out above) */
|
||||
return 0;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (path) {
|
||||
char fpath[PATH_MAX];
|
||||
|
||||
Reference in New Issue
Block a user