Skip to content

Commit 42d4892

Browse files
committed
Simplifies cancel operations.
1 parent 5635915 commit 42d4892

File tree

1 file changed

+22
-34
lines changed

1 file changed

+22
-34
lines changed

include/boost/redis/detail/connection_base.hpp

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -387,17 +387,25 @@ class connection_base {
387387
/// Cancels specific operations.
388388
void cancel(operation op)
389389
{
390-
// TODO: Simplify
391390
switch (op) {
392391
case operation::resolve:
393392
resv_.cancel();
394393
break;
395394
case operation::ssl_handshake:
396395
ssl_handshaker_.cancel();
397396
break;
397+
case operation::exec:
398+
cancel_unwritten_requests();
399+
break;
398400
case operation::reconnection:
399401
cfg_.reconnect_wait_interval = std::chrono::seconds::zero();
400402
break;
403+
case operation::run:
404+
cancel_run();
405+
break;
406+
case operation::receive:
407+
receive_channel_.cancel();
408+
break;
401409
case operation::health_check:
402410
health_checker_.cancel();
403411
break;
@@ -406,18 +414,12 @@ class connection_base {
406414
ssl_handshaker_.cancel();
407415
cfg_.reconnect_wait_interval = std::chrono::seconds::zero();
408416
health_checker_.cancel();
417+
cancel_run(); // run
418+
receive_channel_.cancel(); // receive
419+
cancel_unwritten_requests(); // exec
409420
break;
410421
default: /* ignore */;
411422
}
412-
413-
if (op == operation::all) {
414-
cancel_impl(operation::run);
415-
cancel_impl(operation::receive);
416-
cancel_impl(operation::exec);
417-
return;
418-
}
419-
420-
cancel_impl(op);
421423
}
422424

423425
template <class Response, class CompletionToken>
@@ -561,32 +563,18 @@ class connection_base {
561563
return ret;
562564
}
563565

564-
void cancel_impl(operation op)
566+
void cancel_run()
565567
{
566-
switch (op) {
567-
case operation::exec:
568-
{
569-
cancel_unwritten_requests();
570-
} break;
571-
case operation::run:
572-
{
573-
// Protects the code below from being called more than
574-
// once, see https://github.com/boostorg/redis/issues/181
575-
if (std::exchange(cancel_run_called_, true)) {
576-
return;
577-
}
578-
579-
close();
580-
writer_timer_.cancel();
581-
receive_channel_.cancel();
582-
cancel_on_conn_lost();
583-
} break;
584-
case operation::receive:
585-
{
586-
receive_channel_.cancel();
587-
} break;
588-
default: /* ignore */;
568+
// Protects the code below from being called more than
569+
// once, see https://github.com/boostorg/redis/issues/181
570+
if (std::exchange(cancel_run_called_, true)) {
571+
return;
589572
}
573+
574+
close();
575+
writer_timer_.cancel();
576+
receive_channel_.cancel();
577+
cancel_on_conn_lost();
590578
}
591579

592580
void on_write()

0 commit comments

Comments
 (0)