Skip to content
Permalink
Browse files
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
  • Loading branch information
dr-m committed May 25, 2022
1 parent 57e66dc commit db0fde3
Showing 1 changed file with 4 additions and 4 deletions.
@@ -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 @@ class aio_uring final : public tpool::aio
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 @@ class aio_uring final : public tpool::aio

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)

0 comments on commit db0fde3

Please sign in to comment.