Browse Source

os_aio_validate_skip(): Fix a data race

pull/1054/head
Marko Mäkelä 7 years ago
parent
commit
f718477714
  1. 17
      storage/innobase/os/os0file.cc

17
storage/innobase/os/os0file.cc

@ -1090,21 +1090,14 @@ os_aio_validate_skip()
/** Try os_aio_validate() every this many times */
# define OS_AIO_VALIDATE_SKIP 13
/** The os_aio_validate() call skip counter.
Use a signed type because of the race condition below. */
static int os_aio_validate_count = OS_AIO_VALIDATE_SKIP;
static int os_aio_validate_count;
/* There is a race condition below, but it does not matter,
because this call is only for heuristic purposes. We want to
reduce the call frequency of the costly os_aio_validate()
check in debug builds. */
--os_aio_validate_count;
if (os_aio_validate_count > 0) {
return(true);
if (my_atomic_add32_explicit(&os_aio_validate_count, -1,
MY_MEMORY_ORDER_RELAXED)
% OS_AIO_VALIDATE_SKIP) {
return true;
}
os_aio_validate_count = OS_AIO_VALIDATE_SKIP;
return(os_aio_validate());
}
#endif /* UNIV_DEBUG */

Loading…
Cancel
Save