1
#include "source/common/io/io_uring_worker_factory_impl.h"
2

            
3
#include "source/common/io/io_uring_worker_impl.h"
4

            
5
namespace Envoy {
6
namespace Io {
7

            
8
IoUringWorkerFactoryImpl::IoUringWorkerFactoryImpl(uint32_t io_uring_size,
9
                                                   bool use_submission_queue_polling,
10
                                                   uint32_t read_buffer_size,
11
                                                   uint32_t write_timeout_ms,
12
                                                   ThreadLocal::SlotAllocator& tls)
13
28
    : io_uring_size_(io_uring_size), use_submission_queue_polling_(use_submission_queue_polling),
14
28
      read_buffer_size_(read_buffer_size), write_timeout_ms_(write_timeout_ms), tls_(tls) {}
15

            
16
45
OptRef<IoUringWorker> IoUringWorkerFactoryImpl::getIoUringWorker() {
17
45
  auto ret = tls_.get();
18
45
  if (ret == absl::nullopt) {
19
2
    return absl::nullopt;
20
2
  }
21
43
  return ret;
22
45
}
23

            
24
28
void IoUringWorkerFactoryImpl::onWorkerThreadInitialized() {
25
28
  tls_.set([io_uring_size = io_uring_size_,
26
28
            use_submission_queue_polling = use_submission_queue_polling_,
27
28
            read_buffer_size = read_buffer_size_,
28
30
            write_timeout_ms = write_timeout_ms_](Event::Dispatcher& dispatcher) {
29
30
    return std::make_shared<IoUringWorkerImpl>(io_uring_size, use_submission_queue_polling,
30
30
                                               read_buffer_size, write_timeout_ms, dispatcher);
31
30
  });
32
28
}
33

            
34
12
bool IoUringWorkerFactoryImpl::currentThreadRegistered() {
35
12
  return !tls_.isShutdown() && tls_.currentThreadRegistered();
36
12
}
37

            
38
} // namespace Io
39
} // namespace Envoy