Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 32 additions & 15 deletions src/amd_detail/stats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,21 @@ sendFd(int sock, int fd) noexcept
{
int data{1};
iovec iov{&data, sizeof(data)};
msghdr msgh;
cmsghdr *cmsgp;
msghdr msgh{};
cmsghdr *cmsgp{};

union {
char buff[CMSG_SPACE(sizeof(int))];
cmsghdr align;
} controlMsg;
} controlMsg{};

msgh.msg_name = nullptr;
msgh.msg_namelen = 0;
msgh.msg_iov = &iov;
msgh.msg_iovlen = 1;
msgh.msg_control = controlMsg.buff;
msgh.msg_controllen = sizeof(controlMsg.buff);
msgh.msg_flags = 0;

cmsgp = CMSG_FIRSTHDR(&msgh);
cmsgp->cmsg_level = SOL_SOCKET;
Expand All @@ -54,20 +55,21 @@ recvFd(int sockfd) noexcept
{
int data, fd;
iovec iov{&data, sizeof(data)};
msghdr msgh;
cmsghdr *cmsgp;
msghdr msgh{};
cmsghdr *cmsgp{};

union {
char buff[CMSG_SPACE(sizeof(int))];
cmsghdr align;
} controlMsg;
} controlMsg{};

msgh.msg_name = nullptr;
msgh.msg_namelen = 0;
msgh.msg_iov = &iov;
msgh.msg_iovlen = 1;
msgh.msg_control = controlMsg.buff;
msgh.msg_controllen = sizeof(controlMsg.buff);
msgh.msg_flags = 0;

if (recvmsg(sockfd, &msgh, 0) == -1)
return -1;
Expand Down Expand Up @@ -129,25 +131,41 @@ StatsServer::statsDeleter(Stats *s)
void
StatsServer::threadFn()
{
int sock{socket(AF_UNIX, SOCK_STREAM, 0)};
pid_t pid{getpid()};
if (sock == -1) {
FileDescriptor sock{FileDescriptor::make_managed(socket(AF_UNIX, SOCK_STREAM, 0))};
pid_t pid{getpid()};
if (sock.get() == -1) {
return;
}
sockaddr_un addr;
populateSocketAddr(addr, pid);
if (bind(sock, reinterpret_cast<const sockaddr *>(&addr), sizeof(addr)) == -1) {
if (bind(sock.get(), reinterpret_cast<const sockaddr *>(&addr), sizeof(addr)) == -1) {
return;
}
if (listen(sock, 64) == -1) {
if (listen(sock.get(), 64) == -1) {
return;
}
while (true) {
pollfd pfd[2]{{sock, POLLIN, 0}, {m_efd.get(), POLLIN, 0}};
poll(&pfd[0], 2, -1);
pollfd pfd[2]{{sock.get(), POLLIN, 0}, {m_efd.get(), POLLIN, 0}};

int ret = poll(&pfd[0], 2, -1);

if (ret == 0) {
continue;
}
else if (ret < 0) {
if (errno == EINTR) {
// Signal interrupt
continue;
}
else {
// Badness
break;
}
}

if (pfd[0].revents & POLLIN) {
socklen_t addrlen{sizeof(addr)};
int conn{accept(sock, reinterpret_cast<sockaddr *>(&addr), &addrlen)};
int conn{accept(sock.get(), reinterpret_cast<sockaddr *>(&addr), &addrlen)};
if (conn == -1) {
continue;
}
Expand All @@ -158,7 +176,6 @@ StatsServer::threadFn()
break;
}
}
close(sock);
}

StatsClient::StatsClient(pid_t p)
Expand Down
12 changes: 12 additions & 0 deletions test/amd_detail/file-descriptor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ TEST_F(HipFileFileDescriptor, ManagedFileDescriptorMoveCopyConstructor)
{
auto fd_a{FileDescriptor::make_managed(42)};
auto fd_b{std::move(fd_a)};

// coverity[USE_AFTER_MOVE]
ASSERT_EQ(fd_a.get(), -1); // NOLINT(clang-analyzer-cplusplus.Move)
ASSERT_EQ(fd_b.get(), 42);
EXPECT_CALL(msys, close(42));
Expand All @@ -50,6 +52,8 @@ TEST_F(HipFileFileDescriptor, UnmanagedFileDescriptorMoveCopyConstructor)
{
auto fd_a{FileDescriptor::make_unmanaged(42)};
auto fd_b{std::move(fd_a)};

// coverity[USE_AFTER_MOVE]
ASSERT_EQ(fd_a.get(), -1); // NOLINT(clang-analyzer-cplusplus.Move)
ASSERT_EQ(fd_b.get(), 42);
}
Expand All @@ -60,6 +64,8 @@ TEST_F(HipFileFileDescriptor, ManagedFileDescriptorToManagedFileDescriptorMoveAs
auto fd_b{FileDescriptor::make_managed(12)};
EXPECT_CALL(msys, close(12));
fd_b = std::move(fd_a);

// coverity[USE_AFTER_MOVE]
ASSERT_EQ(fd_a.get(), -1); // NOLINT(clang-analyzer-cplusplus.Move)
ASSERT_EQ(fd_b.get(), 42);
EXPECT_CALL(msys, close(42));
Expand All @@ -70,6 +76,8 @@ TEST_F(HipFileFileDescriptor, ManagedFileDescriptorToUnmanagedFileDescriptorMove
auto fd_a{FileDescriptor::make_managed(42)};
auto fd_b{FileDescriptor::make_unmanaged(12)};
fd_b = std::move(fd_a);

// coverity[USE_AFTER_MOVE]
ASSERT_EQ(fd_a.get(), -1); // NOLINT(clang-analyzer-cplusplus.Move)
ASSERT_EQ(fd_b.get(), 42);
EXPECT_CALL(msys, close(42));
Expand All @@ -81,6 +89,8 @@ TEST_F(HipFileFileDescriptor, UnmanagedFileDescriptorToManagedFileDescriptorMove
auto fd_b{FileDescriptor::make_managed(12)};
EXPECT_CALL(msys, close(12));
fd_b = std::move(fd_a);

// coverity[USE_AFTER_MOVE]
ASSERT_EQ(fd_a.get(), -1); // NOLINT(clang-analyzer-cplusplus.Move)
ASSERT_EQ(fd_b.get(), 42);
}
Expand All @@ -90,6 +100,8 @@ TEST_F(HipFileFileDescriptor, UnmanagedFileDescriptorToUnmanagedFileDescriptorMo
auto fd_a{FileDescriptor::make_unmanaged(42)};
auto fd_b{FileDescriptor::make_unmanaged(12)};
fd_b = std::move(fd_a);

// coverity[USE_AFTER_MOVE]
ASSERT_EQ(fd_a.get(), -1); // NOLINT(clang-analyzer-cplusplus.Move)
ASSERT_EQ(fd_b.get(), 42);
}
Expand Down
2 changes: 1 addition & 1 deletion test/amd_detail/stats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ TEST_F(HipFileStats, StatsServerLifetime)
EXPECT_CALL(msys, ftruncate);
EXPECT_CALL(msys, mmap).WillOnce(testing::Return(&buff));
EXPECT_CALL(msys, munmap);
EXPECT_CALL(msys, close).Times(2);
EXPECT_CALL(msys, close).Times(3);
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have to bump this because now we are calling one more close() through the mock

EXPECT_CALL(mcfg, statsLevel()).WillOnce(testing::Return(1));
StatsServer srvr{};
}
Expand Down
Loading