summaryrefslogtreecommitdiffhomepage
path: root/test/syscalls
diff options
context:
space:
mode:
Diffstat (limited to 'test/syscalls')
-rw-r--r--test/syscalls/linux/BUILD1
-rw-r--r--test/syscalls/linux/mq.cc22
2 files changed, 16 insertions, 7 deletions
diff --git a/test/syscalls/linux/BUILD b/test/syscalls/linux/BUILD
index 9d975c614..6217ff4dc 100644
--- a/test/syscalls/linux/BUILD
+++ b/test/syscalls/linux/BUILD
@@ -4209,6 +4209,7 @@ cc_binary(
linkstatic = 1,
deps = [
"//test/util:capability_util",
+ "//test/util:cleanup",
"//test/util:fs_util",
"//test/util:mount_util",
"//test/util:posix_error",
diff --git a/test/syscalls/linux/mq.cc b/test/syscalls/linux/mq.cc
index 839877a67..013994fd9 100644
--- a/test/syscalls/linux/mq.cc
+++ b/test/syscalls/linux/mq.cc
@@ -22,6 +22,7 @@
#include <string>
#include "test/util/capability_util.h"
+#include "test/util/cleanup.h"
#include "test/util/fs_util.h"
#include "test/util/mount_util.h"
#include "test/util/posix_error.h"
@@ -286,18 +287,25 @@ TEST(MqTest, Mount) {
TEST(MqTest, MountSeveral) {
SKIP_IF(IsRunningWithVFS1() ||
!ASSERT_NO_ERRNO_AND_VALUE(HaveCapability(CAP_SYS_ADMIN)));
+ constexpr int numMounts = 3;
+ // mountDirs should outlive mountCUs and queue so that its destructor succeeds
+ // in unlinking the mountpoints and does not interfere with queue destruction.
+ testing::TempPath mountDirs[numMounts];
+ testing::Cleanup mountCUs[numMounts];
PosixQueue queue = ASSERT_NO_ERRNO_AND_VALUE(
MqOpen(O_RDWR | O_CREAT | O_EXCL, 0777, nullptr));
- auto const dir1 = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
- // Assign the pointer so it doesn't get destroyed before the second mount is
- // created.
- auto mnt =
- ASSERT_NO_ERRNO_AND_VALUE(Mount("none", dir1.path(), "mqueue", 0, "", 0));
+ for (int i = 0; i < numMounts; ++i) {
+ mountDirs[i] = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
+ mountCUs[i] = ASSERT_NO_ERRNO_AND_VALUE(
+ Mount("none", mountDirs[i].path(), "mqueue", 0, "", 0));
+ }
- auto const dir2 = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateDir());
- ASSERT_NO_ERRNO(Mount("none", dir2.path(), "mqueue", 0, "", 0));
+ // Ensure that queue is visible from all mounts.
+ for (int i = 0; i < numMounts; ++i) {
+ ASSERT_NO_ERRNO(Stat(JoinPath(mountDirs[i].path(), queue.name())));
+ }
}
// Test mounting mqueue and opening a queue as normal file.