Browse Source

MDEV-28665 aio_uring::thread_routine terminates prematurely, causing hang

aio_uring::thread_routine(): Handle -EINTR from io_uring_wait_cqe()
in the same way as aio_linux::getevent_thread_routine() does it:
simply ignore it and invoke the system call again.

Reviewed by: Vladislav Vaintroub
bb-10.6-MDEV-18976
Marko Mäkelä 3 years ago
parent
commit
db0fde3f24
  1. 8
      tpool/aio_liburing.cc

8
tpool/aio_liburing.cc

@ -1,4 +1,4 @@
/* Copyright (C) 2021, MariaDB Corporation.
/* Copyright (C) 2021, 2022, MariaDB Corporation.
This program is free software; you can redistribute itand /or modify
it under the terms of the GNU General Public License as published by
@ -137,8 +137,8 @@ private:
io_uring_cqe *cqe;
if (int ret= io_uring_wait_cqe(&aio->uring_, &cqe))
{
if (ret == -EINTR) // this may occur during shutdown
break;
if (ret == -EINTR)
continue;
my_printf_error(ER_UNKNOWN_ERROR,
"io_uring_wait_cqe() returned %d\n",
ME_ERROR_LOG | ME_FATAL, ret);
@ -147,7 +147,7 @@ private:
auto *iocb= static_cast<tpool::aiocb*>(io_uring_cqe_get_data(cqe));
if (!iocb)
break;
break; // ~aio_uring() told us to terminate
int res= cqe->res;
if (res < 0)

Loading…
Cancel
Save