mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
Merge mysql.com:/home/mydev/mysql-4.1-bug5390
into mysql.com:/home/mydev/mysql-5.0-bug5390
This commit is contained in:
commit
ab71bd7ee5
1 changed files with 18 additions and 4 deletions
22
sql/lock.cc
22
sql/lock.cc
|
@ -155,7 +155,14 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
|
||||||
}
|
}
|
||||||
thd->proc_info="Table lock";
|
thd->proc_info="Table lock";
|
||||||
thd->locked=1;
|
thd->locked=1;
|
||||||
rc= thr_lock_errno_to_mysql[(int) thr_multi_lock(sql_lock->locks,
|
/* Copy the lock data array. thr_multi_lock() reorders its contens. */
|
||||||
|
memcpy(sql_lock->locks + sql_lock->lock_count, sql_lock->locks,
|
||||||
|
sql_lock->lock_count * sizeof(*sql_lock->locks));
|
||||||
|
/* Lock on the copied half of the lock data array. */
|
||||||
|
if (thr_multi_lock(sql_lock->locks + sql_lock->lock_count,
|
||||||
|
sql_lock->lock_count))
|
||||||
|
rc= thr_lock_errno_to_mysql[(int) thr_multi_lock(sql_lock->locks +
|
||||||
|
sql_lock->lock_count,
|
||||||
sql_lock->lock_count,
|
sql_lock->lock_count,
|
||||||
thd->lock_id)];
|
thd->lock_id)];
|
||||||
if (rc > 1) /* a timeout or a deadlock */
|
if (rc > 1) /* a timeout or a deadlock */
|
||||||
|
@ -659,13 +666,20 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Allocating twice the number of pointers for lock data for use in
|
||||||
|
thr_mulit_lock(). This function reorders the lock data, but cannot
|
||||||
|
update the table values. So the second part of the array is copied
|
||||||
|
from the first part immediately before calling thr_multi_lock().
|
||||||
|
*/
|
||||||
if (!(sql_lock= (MYSQL_LOCK*)
|
if (!(sql_lock= (MYSQL_LOCK*)
|
||||||
my_malloc(sizeof(*sql_lock)+
|
my_malloc(sizeof(*sql_lock) +
|
||||||
sizeof(THR_LOCK_DATA*)*tables+sizeof(table_ptr)*lock_count,
|
sizeof(THR_LOCK_DATA*) * tables * 2 +
|
||||||
|
sizeof(table_ptr) * lock_count,
|
||||||
MYF(0))))
|
MYF(0))))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
locks= locks_buf= sql_lock->locks= (THR_LOCK_DATA**) (sql_lock + 1);
|
locks= locks_buf= sql_lock->locks= (THR_LOCK_DATA**) (sql_lock + 1);
|
||||||
to= table_buf= sql_lock->table= (TABLE**) (locks + tables);
|
to= table_buf= sql_lock->table= (TABLE**) (locks + tables * 2);
|
||||||
sql_lock->table_count=lock_count;
|
sql_lock->table_count=lock_count;
|
||||||
sql_lock->lock_count=tables;
|
sql_lock->lock_count=tables;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue