X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Funix.cpp;h=0548aaccbab6fccce6f98093cf7c98cceca4ebf7;hb=7d1f4920efe33a4d025b9ba632ffbe73557d9636;hp=091587f48f0edbd31ebdb4d24f6714abba19b131;hpb=c922647daed3dd022be11980063b5fb816d8c091;p=lttng-tools.git diff --git a/src/common/unix.cpp b/src/common/unix.cpp index 091587f48..0548aaccb 100644 --- a/src/common/unix.cpp +++ b/src/common/unix.cpp @@ -15,12 +15,12 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include -#include "unix.h" +#include "unix.hpp" /* * Connect to unix socket using the path name. @@ -239,8 +239,11 @@ retry: /* * We consider EPIPE and EAGAIN/EWOULDBLOCK as expected. */ + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_LOGICAL_OP if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EPIPE) { + DIAGNOSTIC_POP /* * Nothing was recv. */ @@ -343,8 +346,11 @@ retry: /* * We consider EPIPE and EAGAIN/EWOULDBLOCK as expected. */ + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_LOGICAL_OP if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EPIPE) { + DIAGNOSTIC_POP /* * This can happen in non blocking mode. * Nothing was sent. @@ -373,7 +379,16 @@ int lttcomm_close_unix_sock(int sock) /* Shutdown receptions and transmissions */ ret = shutdown(sock, SHUT_RDWR); if (ret < 0) { - PERROR("shutdown"); + /* + * The socket is already disconnected, don't error out. + * This doesn't happen on Linux, but it does on FreeBSD, see: + * https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227259 + */ + if (errno == ENOTCONN) { + ret = 0; + } else { + PERROR("shutdown"); + } } closeret = close(sock); @@ -569,7 +584,10 @@ retry: /* * We consider EPIPE and EAGAIN/EWOULDBLOCK as expected. */ + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_LOGICAL_OP if (errno == EAGAIN || errno == EWOULDBLOCK) { + DIAGNOSTIC_POP /* * This can happen in non blocking mode. * Nothing was sent. @@ -883,7 +901,10 @@ retry: /* * We consider EPIPE and EAGAIN/EWOULDBLOCK as expected. */ + DIAGNOSTIC_PUSH + DIAGNOSTIC_IGNORE_LOGICAL_OP if (errno == EAGAIN || errno == EWOULDBLOCK) { + DIAGNOSTIC_POP /* * This can happen in non blocking mode. * Nothing was recv. @@ -1138,7 +1159,7 @@ int lttcomm_setsockopt_creds_unix_sock(int sock) return ret; } #elif (defined(__FreeBSD__) || defined(__sun__) || defined(__APPLE__)) -int lttcomm_setsockopt_creds_unix_sock(int sock) +int lttcomm_setsockopt_creds_unix_sock(int sock __attribute__((unused))) { return 0; }