Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F162638567
D57781.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D57781.diff
View Options
diff --git a/tests/sys/fs/fusefs/mockfs.hh b/tests/sys/fs/fusefs/mockfs.hh
--- a/tests/sys/fs/fusefs/mockfs.hh
+++ b/tests/sys/fs/fusefs/mockfs.hh
@@ -388,6 +388,9 @@
/* 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/mockfs.cc b/tests/sys/fs/fusefs/mockfs.cc
--- a/tests/sys/fs/fusefs/mockfs.cc
+++ b/tests/sys/fs/fusefs/mockfs.cc
@@ -550,9 +550,8 @@
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 @@
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/pre-init.cc b/tests/sys/fs/fusefs/pre-init.cc
--- a/tests/sys/fs/fusefs/pre-init.cc
+++ b/tests/sys/fs/fusefs/pre-init.cc
@@ -102,6 +102,8 @@
})));
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 @@
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 @@
out.body.attr.attr_valid = UINT64_MAX;
})));
+ m_mock->start_service();
+
EXPECT_EQ(0, stat("mountpoint", &sb));
EXPECT_EQ(nlink, sb.st_nlink);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 16, 7:27 AM (18 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35104700
Default Alt Text
D57781.diff (2 KB)
Attached To
Mode
D57781: fusefs: fix a race in the pre-init tests
Attached
Detach File
Event Timeline
Log In to Comment