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:
Zbigniew Jędrzejewski-Szmek
2015-09-30 14:23:13 -04:00
parent 7bbb5359c0
commit 0260d1d542
+7 -2
View File
@@ -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];