3977 Vasil Dimov 2012-06-08
Fix Bug#13966453 CONCURRENT DML AND READS FROM I_S TABLES CRASH
FETCH_DATA_INTO_CACHE_LOW
Traversing the list trx_sys->mysql_trx_list should be done like:
for (trx = UT_LIST_GET_FIRST(trx_sys->mysql_trx_list);
trx != NULL;
trx = UT_LIST_GET_NEXT(mysql_trx_list, trx)) {
and not like:
for (trx = UT_LIST_GET_FIRST(trx_sys->mysql_trx_list);
trx != NULL;
trx = UT_LIST_GET_NEXT(trx_list, trx)) {
This bug was introduced in:
* revision-id: sunny.bains@stripped
* committer: Sunny Bains <Sunny.Bains@stripped>
* branch nick: trunk
* timestamp: Mon 2011-11-21 07:25:39 +1100
* message:
* WL#6046 - Special handling of read-only transactions
* ...
Before that changeset the code only traversed trx_sys->trx_list like:
for (trx = UT_LIST_GET_FIRST(trx_sys->trx_list);
trx != NULL;
trx = UT_LIST_GET_NEXT(trx_list, trx)) {
and it did not fiddle with trx_sys->mysql_trx_list.
In WL#6046 the code was changed so that trx_sys->trx_list in the
initialization of the "for" loop became a parameter
(trx_sys->mysql_trx_list is passed as that parameter), but the update
statement of the "for" loop was not adjusted and was left like
"trx = UT_LIST_GET_NEXT(trx_list, trx)".
modified:
storage/innobase/trx/trx0i_s.cc
3976 Bjorn Munch 2012-06-08
Fix RPM spec file so SuSE 11.1 is treated as 11
modified:
support-files/mysql.spec.sh
=== modified file 'storage/innobase/trx/trx0i_s.cc'
--- a/storage/innobase/trx/trx0i_s.cc revid:bjorn.munch@stripped
+++ b/storage/innobase/trx/trx0i_s.cc revid:vasil.dimov@stripped
@@ -1300,7 +1300,10 @@ fetch_data_into_cache_low(
for (trx = UT_LIST_GET_FIRST(*trx_list);
trx != NULL;
- trx = UT_LIST_GET_NEXT(trx_list, trx)) {
+ trx =
+ (trx_list == &trx_sys->mysql_trx_list
+ ? UT_LIST_GET_NEXT(mysql_trx_list, trx)
+ : UT_LIST_GET_NEXT(trx_list, trx))) {
i_s_trx_row_t* trx_row;
i_s_locks_row_t* requested_lock_row;
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-trunk branch (vasil.dimov:3976 to 3977) Bug#13966453 | vasil.dimov | 9 Jun |