Below is the list of changes that have just been committed into a local
5.0 repository of mydev. When mydev does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2036 06/02/20 15:30:15 ingo@stripped +1 -0
Merge mysql.com:/home/mydev/mysql-4.1-bug5390
into mysql.com:/home/mydev/mysql-5.0-bug5390
sql/lock.cc
1.84 06/02/20 15:30:11 ingo@stripped +2 -1
BUG#5390 - problems with merge tables
Merge from 4.1
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: ingo
# Host: chilla.local
# Root: /home/mydev/mysql-5.0-bug5390/RESYNC
--- 1.83/sql/lock.cc 2006-02-20 15:23:52 +01:00
+++ 1.84/sql/lock.cc 2006-02-20 15:30:11 +01:00
@@ -155,7 +155,14 @@
}
thd->proc_info="Table lock";
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,
thd->lock_id)];
if (rc > 1) /* a timeout or a deadlock */
@@ -659,13 +666,20 @@
}
}
+ /*
+ 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*)
- my_malloc(sizeof(*sql_lock)+
- sizeof(THR_LOCK_DATA*)*tables+sizeof(table_ptr)*lock_count,
+ my_malloc(sizeof(*sql_lock) +
+ sizeof(THR_LOCK_DATA*) * tables * 2 +
+ sizeof(table_ptr) * lock_count,
MYF(0))))
DBUG_RETURN(0);
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->lock_count=tables;
| Thread |
|---|
| • bk commit into 5.0 tree (ingo:1.2036) | ingo | 20 Feb |