Change type of concurrency_hint to int.
diff --git a/asio/include/asio/detail/impl/scheduler.ipp b/asio/include/asio/detail/impl/scheduler.ipp index 6bc9cf0..91d5794 100644 --- a/asio/include/asio/detail/impl/scheduler.ipp +++ b/asio/include/asio/detail/impl/scheduler.ipp
@@ -84,7 +84,7 @@ }; scheduler::scheduler( - asio::execution_context& ctx, std::size_t concurrency_hint) + asio::execution_context& ctx, int concurrency_hint) : asio::detail::execution_context_service_base<scheduler>(ctx), one_thread_(concurrency_hint == 1), mutex_(),
diff --git a/asio/include/asio/detail/impl/win_iocp_io_context.ipp b/asio/include/asio/detail/impl/win_iocp_io_context.ipp index bf5a20f..3bc1a8d 100644 --- a/asio/include/asio/detail/impl/win_iocp_io_context.ipp +++ b/asio/include/asio/detail/impl/win_iocp_io_context.ipp
@@ -62,7 +62,7 @@ }; win_iocp_io_context::win_iocp_io_context( - asio::execution_context& ctx, size_t concurrency_hint) + asio::execution_context& ctx, int concurrency_hint) : execution_context_service_base<win_iocp_io_context>(ctx), iocp_(), outstanding_work_(0), @@ -75,8 +75,7 @@ ASIO_HANDLER_TRACKING_INIT; iocp_.handle = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0, - static_cast<DWORD>(concurrency_hint < DWORD(~0) - ? concurrency_hint : DWORD(~0))); + static_cast<DWORD>(concurrency_hint >= 0 ? concurrency_hint : DWORD(~0))); if (!iocp_.handle) { DWORD last_error = ::GetLastError();
diff --git a/asio/include/asio/detail/scheduler.hpp b/asio/include/asio/detail/scheduler.hpp index 6bdcfbb..fb86f53 100644 --- a/asio/include/asio/detail/scheduler.hpp +++ b/asio/include/asio/detail/scheduler.hpp
@@ -44,7 +44,7 @@ // Constructor. Specifies the number of concurrent threads that are likely to // run the scheduler. If set to 1 certain optimisation are performed. ASIO_DECL scheduler(asio::execution_context& ctx, - std::size_t concurrency_hint = 0); + int concurrency_hint = 0); // Destroy all user-defined handler objects owned by the service. ASIO_DECL void shutdown();
diff --git a/asio/include/asio/detail/win_iocp_io_context.hpp b/asio/include/asio/detail/win_iocp_io_context.hpp index ffb8c3b..e6a25c4 100644 --- a/asio/include/asio/detail/win_iocp_io_context.hpp +++ b/asio/include/asio/detail/win_iocp_io_context.hpp
@@ -48,7 +48,7 @@ // Constructor. Specifies a concurrency hint that is passed through to the // underlying I/O completion port. ASIO_DECL win_iocp_io_context(asio::execution_context& ctx, - size_t concurrency_hint = 0); + int concurrency_hint = -1); // Destroy all user-defined handler objects owned by the service. ASIO_DECL void shutdown();
diff --git a/asio/include/asio/impl/io_context.ipp b/asio/include/asio/impl/io_context.ipp index 2cce94b..a1d5959 100644 --- a/asio/include/asio/impl/io_context.ipp +++ b/asio/include/asio/impl/io_context.ipp
@@ -33,21 +33,20 @@ namespace asio { io_context::io_context() - : impl_(create_impl()) + : impl_(add_impl(new impl_type(*this))) { } -io_context::io_context(std::size_t concurrency_hint) - : impl_(create_impl(concurrency_hint)) +io_context::io_context(int concurrency_hint) + : impl_(add_impl(new impl_type(*this, concurrency_hint))) { } -io_context::impl_type& io_context::create_impl(std::size_t concurrency_hint) +io_context::impl_type& io_context::add_impl(io_context::impl_type* impl) { - asio::detail::scoped_ptr<impl_type> impl( - new impl_type(*this, concurrency_hint)); - asio::add_service<impl_type>(*this, impl.get()); - return *impl.release(); + asio::detail::scoped_ptr<impl_type> scoped_impl(impl); + asio::add_service<impl_type>(*this, scoped_impl.get()); + return *scoped_impl.release(); } io_context::~io_context()
diff --git a/asio/include/asio/io_context.hpp b/asio/include/asio/io_context.hpp index 2f92a6d..7fb49a9 100644 --- a/asio/include/asio/io_context.hpp +++ b/asio/include/asio/io_context.hpp
@@ -170,7 +170,7 @@ * @param concurrency_hint A suggestion to the implementation on how many * threads it should allow to run simultaneously. */ - ASIO_DECL explicit io_context(std::size_t concurrency_hint); + ASIO_DECL explicit io_context(int concurrency_hint); /// Destructor. /** @@ -479,8 +479,8 @@ #endif // !defined(ASIO_NO_DEPRECATED) private: - // Helper function to create the implementation. - ASIO_DECL impl_type& create_impl(std::size_t concurrency_hint = 0); + // Helper function to add the implementation. + ASIO_DECL impl_type& add_impl(impl_type* impl); // Backwards compatible overload for use with services derived from // io_context::service.