diff options
| author | Alan Somers <asomers@FreeBSD.org> | 2026-06-23 17:12:04 +0000 |
|---|---|---|
| committer | Alan Somers <asomers@FreeBSD.org> | 2026-06-23 18:01:48 +0000 |
| commit | 2c1482e305368af182a7bde0e53d0d180b319326 (patch) | |
| tree | 90b6a074afb8ad7b3ce397dd21dd438ab85a031e | |
| parent | fdca6b70aa7ebbc95b544cec6e155ea5b1041899 (diff) | |
| -rw-r--r-- | tests/sys/fs/fusefs/mockfs.cc | 11 | ||||
| -rw-r--r-- | tests/sys/fs/fusefs/mockfs.hh | 3 | ||||
| -rw-r--r-- | tests/sys/fs/fusefs/pre-init.cc | 6 |
3 files changed, 17 insertions, 3 deletions
diff --git a/tests/sys/fs/fusefs/mockfs.cc b/tests/sys/fs/fusefs/mockfs.cc index b9e4afbbea0b..0e395a4fabb3 100644 --- a/tests/sys/fs/fusefs/mockfs.cc +++ b/tests/sys/fs/fusefs/mockfs.cc @@ -550,9 +550,8 @@ MockFS::MockFS(int max_read, int max_readahead, bool allow_other, if (0 != sigaction(SIGUSR1, &sa, NULL)) throw(std::system_error(errno, std::system_category(), "Couldn't handle SIGUSR1")); - if (pthread_create(&m_daemon_id, NULL, service, (void*)this)) - throw(std::system_error(errno, std::system_category(), - "Couldn't Couldn't start fuse thread")); + if (!no_auto_init) + start_service(); } MockFS::~MockFS() { @@ -1018,6 +1017,12 @@ void MockFS::read_request(mockfs_buf_in &in, ssize_t &res) { ASSERT_TRUE(res == static_cast<ssize_t>(in.header.len) || m_quit); } +void MockFS::start_service() { + if (pthread_create(&m_daemon_id, NULL, service, (void*)this)) + throw(std::system_error(errno, std::system_category(), + "Couldn't Couldn't start fuse thread")); +} + void MockFS::write_response(const mockfs_buf_out &out) { fd_set writefds; pollfd fds[1]; diff --git a/tests/sys/fs/fusefs/mockfs.hh b/tests/sys/fs/fusefs/mockfs.hh index c8f90c2f5402..19693e50d212 100644 --- a/tests/sys/fs/fusefs/mockfs.hh +++ b/tests/sys/fs/fusefs/mockfs.hh @@ -388,6 +388,9 @@ class MockFS { /* Process FUSE requests endlessly */ void loop(); + /* Begin processing requests from the kernel */ + void start_service(); + /* * Send an asynchronous notification to invalidate a directory entry. * Similar to libfuse's fuse_lowlevel_notify_inval_entry diff --git a/tests/sys/fs/fusefs/pre-init.cc b/tests/sys/fs/fusefs/pre-init.cc index 2d3257500304..70d7ddcdb0f4 100644 --- a/tests/sys/fs/fusefs/pre-init.cc +++ b/tests/sys/fs/fusefs/pre-init.cc @@ -102,6 +102,8 @@ TEST_F(PreInit, unmount_before_init) }))); expect_destroy(0); + m_mock->start_service(); + ASSERT_EQ(0, pthread_create(&th1, NULL, unmount1, NULL)); nap(); /* Wait for th1 to block in unmount() */ sem_post(&sem0); @@ -147,6 +149,8 @@ TEST_F(PreInit, signal_during_unmount_before_init) sem_wait(&sem0); }))); + m_mock->start_service(); + if ((child = ::fork()) == 0) { /* * In child. This will block waiting for FUSE_INIT to complete @@ -219,6 +223,8 @@ TEST_P(PreInitP, getattr_before_init) out.body.attr.attr_valid = UINT64_MAX; }))); + m_mock->start_service(); + EXPECT_EQ(0, stat("mountpoint", &sb)); EXPECT_EQ(nlink, sb.st_nlink); } |
