@@ -1998,7 +1998,7 @@ class Service::PostOper : public PostOperBase {
1998
1998
public:
1999
1999
PostOper (std::size_t size, Impl& service, H&& handler)
2000
2000
: PostOperBase{size, service}
2001
- , m_handler{std::move (handler)}
2001
+ , m_handler{std::forward<H> (handler)}
2002
2002
{
2003
2003
}
2004
2004
void recycle_and_execute () override final
@@ -2256,7 +2256,7 @@ class Service::BasicStreamOps {
2256
2256
char * begin = buffer;
2257
2257
char * end = buffer + size;
2258
2258
LendersReadOperPtr op = Service::alloc<ReadOper<H>>(stream.lowest_layer ().m_read_oper , stream, is_read_some,
2259
- begin, end, std::move (handler)); // Throws
2259
+ begin, end, std::forward<H> (handler)); // Throws
2260
2260
stream.lowest_layer ().m_desc .initiate_oper (std::move (op)); // Throws
2261
2261
}
2262
2262
@@ -2265,8 +2265,9 @@ class Service::BasicStreamOps {
2265
2265
{
2266
2266
const char * begin = data;
2267
2267
const char * end = data + size;
2268
- LendersWriteOperPtr op = Service::alloc<WriteOper<H>>(
2269
- stream.lowest_layer ().m_write_oper , stream, is_write_some, begin, end, std::move (handler)); // Throws
2268
+ LendersWriteOperPtr op =
2269
+ Service::alloc<WriteOper<H>>(stream.lowest_layer ().m_write_oper , stream, is_write_some, begin, end,
2270
+ std::forward<H>(handler)); // Throws
2270
2271
stream.lowest_layer ().m_desc .initiate_oper (std::move (op)); // Throws
2271
2272
}
2272
2273
@@ -2278,7 +2279,7 @@ class Service::BasicStreamOps {
2278
2279
char * end = buffer + size;
2279
2280
LendersBufferedReadOperPtr op =
2280
2281
Service::alloc<BufferedReadOper<H>>(stream.lowest_layer ().m_read_oper , stream, begin, end, delim, rab,
2281
- std::move (handler)); // Throws
2282
+ std::forward<H> (handler)); // Throws
2282
2283
stream.lowest_layer ().m_desc .initiate_oper (std::move (op)); // Throws
2283
2284
}
2284
2285
};
@@ -2554,7 +2555,7 @@ class Service::BasicStreamOps<S>::ReadOper : public ReadOperBase {
2554
2555
public:
2555
2556
ReadOper (std::size_t size, S& stream, bool is_read_some, char * begin, char * end, H&& handler)
2556
2557
: ReadOperBase{size, stream, is_read_some, begin, end}
2557
- , m_handler{std::move (handler)}
2558
+ , m_handler{std::forward<H> (handler)}
2558
2559
{
2559
2560
}
2560
2561
void recycle_and_execute () override final
@@ -2584,7 +2585,7 @@ class Service::BasicStreamOps<S>::WriteOper : public WriteOperBase {
2584
2585
public:
2585
2586
WriteOper (std::size_t size, S& stream, bool is_write_some, const char * begin, const char * end, H&& handler)
2586
2587
: WriteOperBase{size, stream, is_write_some, begin, end}
2587
- , m_handler{std::move (handler)}
2588
+ , m_handler{std::forward<H> (handler)}
2588
2589
{
2589
2590
}
2590
2591
void recycle_and_execute () override final
@@ -2615,7 +2616,7 @@ class Service::BasicStreamOps<S>::BufferedReadOper : public BufferedReadOperBase
2615
2616
BufferedReadOper (std::size_t size, S& stream, char * begin, char * end, int delim, ReadAheadBuffer& rab,
2616
2617
H&& handler)
2617
2618
: BufferedReadOperBase{size, stream, begin, end, delim, rab}
2618
- , m_handler{std::move (handler)}
2619
+ , m_handler{std::forward<H> (handler)}
2619
2620
{
2620
2621
}
2621
2622
void recycle_and_execute () override final
@@ -2703,7 +2704,7 @@ template <class H>
2703
2704
inline Service::PostOperBase* Service::post_oper_constr (void * addr, std::size_t size, Impl& service, void * cookie)
2704
2705
{
2705
2706
H& handler = *static_cast <H*>(cookie);
2706
- return new (addr) PostOper<H>(size, service, std::move (handler)); // Throws
2707
+ return new (addr) PostOper<H>(size, service, std::forward<H> (handler)); // Throws
2707
2708
}
2708
2709
2709
2710
inline bool Service::AsyncOper::in_use () const noexcept
@@ -2769,10 +2770,8 @@ inline void Service::AsyncOper::do_recycle_and_execute(bool orphaned, H& handler
2769
2770
// happens. For that reason, copying and moving of arguments must not
2770
2771
// happen until we are in a scope (this scope) that catches and deals
2771
2772
// correctly with such exceptions.
2772
- do_recycle_and_execute_helper (orphaned, was_recycled, std::move (handler),
2773
+ do_recycle_and_execute_helper (orphaned, was_recycled, std::forward<H> (handler),
2773
2774
std::forward<Args>(args)...); // Throws
2774
-
2775
- // Removed catch to prevent truncating the stack trace on exception
2776
2775
}
2777
2776
2778
2777
template <class H , class ... Args>
@@ -2805,7 +2804,7 @@ class Resolver::ResolveOper : public Service::ResolveOperBase {
2805
2804
public:
2806
2805
ResolveOper (std::size_t size, Resolver& r, Query q, H&& handler)
2807
2806
: ResolveOperBase{size, r, std::move (q)}
2808
- , m_handler{std::move (handler)}
2807
+ , m_handler{std::forward<H> (handler)}
2809
2808
{
2810
2809
}
2811
2810
void recycle_and_execute () override final
@@ -2847,7 +2846,7 @@ template <class H>
2847
2846
void Resolver::async_resolve (Query query, H&& handler)
2848
2847
{
2849
2848
Service::LendersResolveOperPtr op = Service::alloc<ResolveOper<H>>(m_resolve_oper, *this , std::move (query),
2850
- std::move (handler)); // Throws
2849
+ std::forward<H> (handler)); // Throws
2851
2850
initiate_oper (std::move (op)); // Throws
2852
2851
}
2853
2852
@@ -3086,7 +3085,7 @@ class Socket::ConnectOper : public ConnectOperBase {
3086
3085
public:
3087
3086
ConnectOper (std::size_t size, Socket& sock, H&& handler)
3088
3087
: ConnectOperBase{size, sock}
3089
- , m_handler{std::move (handler)}
3088
+ , m_handler{std::forward<H> (handler)}
3090
3089
{
3091
3090
}
3092
3091
void recycle_and_execute () override final
@@ -3214,50 +3213,51 @@ inline std::size_t Socket::write_some(const char* data, std::size_t size, std::e
3214
3213
template <class H >
3215
3214
inline void Socket::async_connect (const Endpoint& ep, H&& handler)
3216
3215
{
3217
- LendersConnectOperPtr op = Service::alloc<ConnectOper<H>>(m_write_oper, *this , std::move (handler)); // Throws
3216
+ LendersConnectOperPtr op =
3217
+ Service::alloc<ConnectOper<H>>(m_write_oper, *this , std::forward<H>(handler)); // Throws
3218
3218
m_desc.initiate_oper (std::move (op), ep); // Throws
3219
3219
}
3220
3220
3221
3221
template <class H >
3222
3222
inline void Socket::async_read (char * buffer, std::size_t size, H&& handler)
3223
3223
{
3224
3224
bool is_read_some = false ;
3225
- StreamOps::async_read (*this , buffer, size, is_read_some, std::move (handler)); // Throws
3225
+ StreamOps::async_read (*this , buffer, size, is_read_some, std::forward<H> (handler)); // Throws
3226
3226
}
3227
3227
3228
3228
template <class H >
3229
3229
inline void Socket::async_read (char * buffer, std::size_t size, ReadAheadBuffer& rab, H&& handler)
3230
3230
{
3231
3231
int delim = std::char_traits<char >::eof ();
3232
- StreamOps::async_buffered_read (*this , buffer, size, delim, rab, std::move (handler)); // Throws
3232
+ StreamOps::async_buffered_read (*this , buffer, size, delim, rab, std::forward<H> (handler)); // Throws
3233
3233
}
3234
3234
3235
3235
template <class H >
3236
3236
inline void Socket::async_read_until (char * buffer, std::size_t size, char delim, ReadAheadBuffer& rab, H&& handler)
3237
3237
{
3238
3238
int delim_2 = std::char_traits<char >::to_int_type (delim);
3239
- StreamOps::async_buffered_read (*this , buffer, size, delim_2, rab, std::move (handler)); // Throws
3239
+ StreamOps::async_buffered_read (*this , buffer, size, delim_2, rab, std::forward<H> (handler)); // Throws
3240
3240
}
3241
3241
3242
3242
template <class H >
3243
3243
inline void Socket::async_write (const char * data, std::size_t size, H&& handler)
3244
3244
{
3245
3245
bool is_write_some = false ;
3246
- StreamOps::async_write (*this , data, size, is_write_some, std::move (handler)); // Throws
3246
+ StreamOps::async_write (*this , data, size, is_write_some, std::forward<H> (handler)); // Throws
3247
3247
}
3248
3248
3249
3249
template <class H >
3250
3250
inline void Socket::async_read_some (char * buffer, std::size_t size, H&& handler)
3251
3251
{
3252
3252
bool is_read_some = true ;
3253
- StreamOps::async_read (*this , buffer, size, is_read_some, std::move (handler)); // Throws
3253
+ StreamOps::async_read (*this , buffer, size, is_read_some, std::forward<H> (handler)); // Throws
3254
3254
}
3255
3255
3256
3256
template <class H >
3257
3257
inline void Socket::async_write_some (const char * data, std::size_t size, H&& handler)
3258
3258
{
3259
3259
bool is_write_some = true ;
3260
- StreamOps::async_write (*this , data, size, is_write_some, std::move (handler)); // Throws
3260
+ StreamOps::async_write (*this , data, size, is_write_some, std::forward<H> (handler)); // Throws
3261
3261
}
3262
3262
3263
3263
inline void Socket::shutdown (shutdown_type what)
@@ -3394,7 +3394,7 @@ class Acceptor::AcceptOper : public AcceptOperBase {
3394
3394
public:
3395
3395
AcceptOper (std::size_t size, Acceptor& a, Socket& s, Endpoint* e, H&& handler)
3396
3396
: AcceptOperBase{size, a, s, e}
3397
- , m_handler{std::move (handler)}
3397
+ , m_handler{std::forward<H> (handler)}
3398
3398
{
3399
3399
}
3400
3400
void recycle_and_execute () override final
@@ -3456,13 +3456,13 @@ template <class H>
3456
3456
inline void Acceptor::async_accept (Socket& sock, H&& handler)
3457
3457
{
3458
3458
Endpoint* ep = nullptr ;
3459
- async_accept (sock, ep, std::move (handler)); // Throws
3459
+ async_accept (sock, ep, std::forward<H> (handler)); // Throws
3460
3460
}
3461
3461
3462
3462
template <class H >
3463
3463
inline void Acceptor::async_accept (Socket& sock, Endpoint& ep, H&& handler)
3464
3464
{
3465
- async_accept (sock, &ep, std::move (handler)); // Throws
3465
+ async_accept (sock, &ep, std::forward<H> (handler)); // Throws
3466
3466
}
3467
3467
3468
3468
inline std::error_code Acceptor::accept (Socket& socket, Endpoint* ep, std::error_code& ec)
@@ -3491,7 +3491,7 @@ inline void Acceptor::async_accept(Socket& sock, Endpoint* ep, H&& handler)
3491
3491
if (REALM_UNLIKELY (sock.is_open ()))
3492
3492
throw util::runtime_error (" Socket is already open" );
3493
3493
LendersAcceptOperPtr op = Service::alloc<AcceptOper<H>>(m_read_oper, *this , sock, ep,
3494
- std::move (handler)); // Throws
3494
+ std::forward<H> (handler)); // Throws
3495
3495
m_desc.initiate_oper (std::move (op)); // Throws
3496
3496
}
3497
3497
@@ -3502,7 +3502,7 @@ class DeadlineTimer::WaitOper : public Service::WaitOperBase {
3502
3502
public:
3503
3503
WaitOper (std::size_t size, DeadlineTimer& timer, clock::time_point expiration_time, H&& handler)
3504
3504
: Service::WaitOperBase{size, timer, expiration_time}
3505
- , m_handler{std::move (handler)}
3505
+ , m_handler{std::forward<H> (handler)}
3506
3506
{
3507
3507
}
3508
3508
void recycle_and_execute () override final
@@ -3542,7 +3542,7 @@ inline void DeadlineTimer::async_wait(std::chrono::duration<R, P> delay, H&& han
3542
3542
throw util::overflow_error (" Expiration time overflow" );
3543
3543
clock ::time_point expiration_time = now + delay;
3544
3544
initiate_oper (Service::alloc<WaitOper<H>>(m_wait_oper, *this , expiration_time,
3545
- std::move (handler))); // Throws
3545
+ std::forward<H> (handler))); // Throws
3546
3546
}
3547
3547
3548
3548
// ---------------- ReadAheadBuffer ----------------
0 commit comments