Skip to content
Closed
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
7 changes: 6 additions & 1 deletion source/common/io/io_uring.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,12 @@ class IoUringFactory {
*/
virtual void onServerInitialized() PURE;

virtual bool currentThreadRegistered() PURE;
/**
* Returns if the io_uring has been initialized. io_uring will usually be created on server
* initialized, but may not be created on integration tests in test threads or before
* initialization.
*/
virtual bool isInitialized() PURE;
};

} // namespace Io
Expand Down
5 changes: 4 additions & 1 deletion source/common/io/io_uring_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ void IoUringFactoryImpl::onServerInitialized() {
});
}

bool IoUringFactoryImpl::currentThreadRegistered() { return tls_.currentThreadRegistered(); }
bool IoUringFactoryImpl::isInitialized() {
// io_uring may not be created in test threads or before onServerInitialized get called.
return tls_.currentThreadRegistered() && tls_.get().has_value();
}

IoUringImpl::IoUringImpl(uint32_t io_uring_size, bool use_submission_queue_polling)
: io_uring_size_(io_uring_size), cqes_(io_uring_size_, nullptr) {
Expand Down
2 changes: 1 addition & 1 deletion source/common/io/io_uring_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class IoUringFactoryImpl : public IoUringFactory {
// IoUringFactory
IoUring& getOrCreate() const override;
void onServerInitialized() override;
bool currentThreadRegistered() override;
bool isInitialized() override;

private:
const uint32_t io_uring_size_{};
Expand Down
2 changes: 1 addition & 1 deletion source/common/network/socket_interface_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ IoHandlePtr SocketInterfaceImpl::makePlatformSpecificSocket(int socket_fd, bool
return std::make_unique<Win32SocketHandleImpl>(socket_fd, socket_v6only, domain);
}

if (io_uring_factory == nullptr || !io_uring_factory->currentThreadRegistered()) {
if (io_uring_factory == nullptr || !io_uring_factory->isInitialized()) {
return std::make_unique<IoSocketHandleImpl>(socket_fd, socket_v6only, domain);
} else {
return std::make_unique<IoUringSocketHandleImpl>(DefaultReadBufferSize, *io_uring_factory,
Expand Down