mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Put back a fix that was reverted when reverting the buggy Bug#12612184 fix in
revision-id inaam.rana@oracle.com-20110930110219-vnpaqghj9hm0grds (revno 3559).
This commit is contained in:
parent
9fc1b4d12b
commit
2837fba743
4 changed files with 27 additions and 17 deletions
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved.
|
||||
Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
|
@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
|
@ -1251,7 +1251,7 @@ buf_block_dbg_add_level(
|
|||
where we have acquired latch */
|
||||
ulint level) /*!< in: latching order level */
|
||||
{
|
||||
sync_thread_add_level(&block->lock, level);
|
||||
sync_thread_add_level(&block->lock, level, FALSE);
|
||||
}
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
/********************************************************************//**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1995, 2011, Innobase Oy. All Rights Reserved.
|
||||
Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
|
@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
|
@ -400,8 +400,10 @@ void
|
|||
sync_thread_add_level(
|
||||
/*==================*/
|
||||
void* latch, /*!< in: pointer to a mutex or an rw-lock */
|
||||
ulint level); /*!< in: level in the latching order; if
|
||||
ulint level, /*!< in: level in the latching order; if
|
||||
SYNC_LEVEL_VARYING, nothing is done */
|
||||
ibool relock) /*!< in: TRUE if re-entering an x-lock */
|
||||
__attribute__((nonnull));
|
||||
/******************************************************************//**
|
||||
Removes a latch from the thread level array if it is found there.
|
||||
@return TRUE if found in the array; it is no error if the latch is
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
|
@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
|
@ -785,7 +785,9 @@ rw_lock_add_debug_info(
|
|||
rw_lock_debug_mutex_exit();
|
||||
|
||||
if ((pass == 0) && (lock_type != RW_LOCK_WAIT_EX)) {
|
||||
sync_thread_add_level(lock, lock->level);
|
||||
sync_thread_add_level(lock, lock->level,
|
||||
lock_type == RW_LOCK_EX
|
||||
&& lock->lock_word < 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1995, 2011, Innobase Oy. All Rights Reserved.
|
||||
Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2008, Google Inc.
|
||||
|
||||
Portions of this file contain modifications contributed and copyrighted by
|
||||
|
@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
|
@ -690,7 +690,7 @@ mutex_set_debug_info(
|
|||
ut_ad(mutex);
|
||||
ut_ad(file_name);
|
||||
|
||||
sync_thread_add_level(mutex, mutex->level);
|
||||
sync_thread_add_level(mutex, mutex->level, FALSE);
|
||||
|
||||
mutex->file_name = file_name;
|
||||
mutex->line = line;
|
||||
|
@ -1133,8 +1133,9 @@ void
|
|||
sync_thread_add_level(
|
||||
/*==================*/
|
||||
void* latch, /*!< in: pointer to a mutex or an rw-lock */
|
||||
ulint level) /*!< in: level in the latching order; if
|
||||
ulint level, /*!< in: level in the latching order; if
|
||||
SYNC_LEVEL_VARYING, nothing is done */
|
||||
ibool relock) /*!< in: TRUE if re-entering an x-lock */
|
||||
{
|
||||
ulint i;
|
||||
sync_level_t* slot;
|
||||
|
@ -1185,6 +1186,10 @@ sync_thread_add_level(
|
|||
|
||||
array = thread_slot->levels;
|
||||
|
||||
if (relock) {
|
||||
goto levels_ok;
|
||||
}
|
||||
|
||||
/* NOTE that there is a problem with _NODE and _LEAF levels: if the
|
||||
B-tree height changes, then a leaf can change to an internal node
|
||||
or the other way around. We do not know at present if this can cause
|
||||
|
@ -1360,6 +1365,7 @@ sync_thread_add_level(
|
|||
ut_error;
|
||||
}
|
||||
|
||||
levels_ok:
|
||||
if (array->next_free == ULINT_UNDEFINED) {
|
||||
ut_a(array->n_elems < array->max_elems);
|
||||
|
||||
|
|
Loading…
Reference in a new issue