MDEV-18662 ib_wqueue_t has a data race
ib_wqueue_is_empty(): protect ib_list_is_empty() call Closes #1202
This commit is contained in:
parent
b88a803459
commit
28cb041754
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2006, 2009, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2006, 2009, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation. All Rights Reserved.
|
Copyright (c) 2017, 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -67,15 +67,10 @@ ib_wqueue_add(
|
|||||||
mem_heap_t* heap); /*!< in: memory heap to use for allocating the
|
mem_heap_t* heap); /*!< in: memory heap to use for allocating the
|
||||||
list node */
|
list node */
|
||||||
|
|
||||||
/********************************************************************
|
/** Check if queue is empty.
|
||||||
Check if queue is empty. */
|
@param wq wait queue
|
||||||
|
@return whether the queue is empty */
|
||||||
ibool
|
bool ib_wqueue_is_empty(ib_wqueue_t* wq);
|
||||||
ib_wqueue_is_empty(
|
|
||||||
/*===============*/
|
|
||||||
/* out: TRUE if queue empty
|
|
||||||
else FALSE */
|
|
||||||
const ib_wqueue_t* wq); /* in: work queue */
|
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
Wait for a work item to appear in the queue.
|
Wait for a work item to appear in the queue.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
Copyright (c) 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -193,17 +194,15 @@ ib_wqueue_nowait(
|
|||||||
return (node ? node->data : NULL);
|
return (node ? node->data : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/** Check if queue is empty.
|
||||||
Check if queue is empty. */
|
@param wq wait queue
|
||||||
|
@return whether the queue is empty */
|
||||||
ibool
|
bool ib_wqueue_is_empty(ib_wqueue_t* wq)
|
||||||
ib_wqueue_is_empty(
|
|
||||||
/*===============*/
|
|
||||||
/* out: TRUE if queue empty
|
|
||||||
else FALSE */
|
|
||||||
const ib_wqueue_t* wq) /* in: work queue */
|
|
||||||
{
|
{
|
||||||
return(ib_list_is_empty(wq->items));
|
mutex_enter(&wq->mutex);
|
||||||
|
bool is_empty = ib_list_is_empty(wq->items);
|
||||||
|
mutex_exit(&wq->mutex);
|
||||||
|
return is_empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2006, 2009, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2006, 2009, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation. All Rights Reserved.
|
Copyright (c) 2017, 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -67,15 +67,10 @@ ib_wqueue_add(
|
|||||||
mem_heap_t* heap); /*!< in: memory heap to use for allocating the
|
mem_heap_t* heap); /*!< in: memory heap to use for allocating the
|
||||||
list node */
|
list node */
|
||||||
|
|
||||||
/********************************************************************
|
/** Check if queue is empty.
|
||||||
Check if queue is empty. */
|
@param wq wait queue
|
||||||
|
@return whether the queue is empty */
|
||||||
ibool
|
bool ib_wqueue_is_empty(ib_wqueue_t* wq);
|
||||||
ib_wqueue_is_empty(
|
|
||||||
/*===============*/
|
|
||||||
/* out: TRUE if queue empty
|
|
||||||
else FALSE */
|
|
||||||
const ib_wqueue_t* wq); /* in: work queue */
|
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
Wait for a work item to appear in the queue.
|
Wait for a work item to appear in the queue.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
Copyright (c) 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -193,17 +194,15 @@ ib_wqueue_nowait(
|
|||||||
return (node ? node->data : NULL);
|
return (node ? node->data : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/** Check if queue is empty.
|
||||||
Check if queue is empty. */
|
@param wq wait queue
|
||||||
|
@return whether the queue is empty */
|
||||||
ibool
|
bool ib_wqueue_is_empty(ib_wqueue_t* wq)
|
||||||
ib_wqueue_is_empty(
|
|
||||||
/*===============*/
|
|
||||||
/* out: TRUE if queue empty
|
|
||||||
else FALSE */
|
|
||||||
const ib_wqueue_t* wq) /* in: work queue */
|
|
||||||
{
|
{
|
||||||
return(ib_list_is_empty(wq->items));
|
mutex_enter(&wq->mutex);
|
||||||
|
bool is_empty = ib_list_is_empty(wq->items);
|
||||||
|
mutex_exit(&wq->mutex);
|
||||||
|
return is_empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
|
Loading…
x
Reference in New Issue
Block a user