Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
5c83b14b
Commit
5c83b14b
authored
Jul 25, 2007
by
svoj@april.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/svoj/devel/bk/mysql-5.1-engines
into mysql.com:/home/svoj/devel/mysql/BUG29806/mysql-5.1-engines
parents
e8942447
3b18aae7
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
35 additions
and
5 deletions
+35
-5
mysql-test/suite/binlog/t/disabled.def
mysql-test/suite/binlog/t/disabled.def
+0
-3
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+6
-0
sql/ha_partition.cc
sql/ha_partition.cc
+14
-1
sql/lock.cc
sql/lock.cc
+7
-1
storage/myisammrg/myrg_locking.c
storage/myisammrg/myrg_locking.c
+8
-0
No files found.
mysql-test/suite/binlog/t/disabled.def
View file @
5c83b14b
...
...
@@ -9,6 +9,3 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
binlog_innodb : Bug#29806 2007-07-15 ingo master.err: InnoDB: Error: MySQL is freeing a thd
binlog_killed : Bug#29806 2007-07-17 ingo master.err: InnoDB: Error: MySQL is freeing a thd
sql/ha_ndbcluster.cc
View file @
5c83b14b
...
...
@@ -4383,7 +4383,10 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
trans
=
ndb
->
startTransaction
();
if
(
trans
==
NULL
)
{
thd_ndb
->
lock_count
=
0
;
ERR_RETURN
(
ndb
->
getNdbError
());
}
thd_ndb
->
init_open_tables
();
thd_ndb
->
stmt
=
trans
;
thd_ndb
->
query_state
&=
NDB_QUERY_NORMAL
;
...
...
@@ -4409,7 +4412,10 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
trans
=
ndb
->
startTransaction
();
if
(
trans
==
NULL
)
{
thd_ndb
->
lock_count
=
0
;
ERR_RETURN
(
ndb
->
getNdbError
());
}
thd_ndb
->
init_open_tables
();
thd_ndb
->
all
=
trans
;
thd_ndb
->
query_state
&=
NDB_QUERY_NORMAL
;
...
...
sql/ha_partition.cc
View file @
5c83b14b
...
...
@@ -1142,6 +1142,12 @@ int ha_partition::prepare_new_partition(TABLE *table,
create_flag
=
TRUE
;
if
((
error
=
file
->
ha_open
(
table
,
part_name
,
m_mode
,
m_open_test_lock
)))
goto
error
;
/*
Note: if you plan to add another call that may return failure,
better to do it before external_lock() as cleanup_new_partition()
assumes that external_lock() is last call that may fail here.
Otherwise see description for cleanup_new_partition().
*/
if
((
error
=
file
->
external_lock
(
current_thd
,
m_lock_type
)))
goto
error
;
...
...
@@ -1164,6 +1170,14 @@ int ha_partition::prepare_new_partition(TABLE *table,
NONE
DESCRIPTION
This function is called immediately after prepare_new_partition() in
case the latter fails.
In prepare_new_partition() last call that may return failure is
external_lock(). That means if prepare_new_partition() fails,
partition does not have external lock. Thus no need to call
external_lock(F_UNLCK) here.
TODO:
We must ensure that in the case that we get an error during the process
that we call external_lock with F_UNLCK, close the table and delete the
...
...
@@ -1182,7 +1196,6 @@ void ha_partition::cleanup_new_partition(uint part_count)
m_file
=
m_added_file
;
m_added_file
=
NULL
;
external_lock
(
current_thd
,
F_UNLCK
);
/* delete_table also needed, a bit more complex */
close
();
...
...
sql/lock.cc
View file @
5c83b14b
...
...
@@ -60,6 +60,11 @@
- When calling UNLOCK TABLES we call mysql_unlock_tables() for all
tables used in LOCK TABLES
If table_handler->external_lock(thd, locktype) fails, we call
table_handler->external_lock(thd, F_UNLCK) for each table that was locked,
excluding one that caused failure. That means handler must cleanup itself
in case external_lock() fails.
TODO:
Change to use my_malloc() ONLY when using LOCK TABLES command or when
we are forced to use mysql_lock_merge.
...
...
@@ -269,8 +274,9 @@ static int lock_external(THD *thd, TABLE **tables, uint count)
if
((
error
=
(
*
tables
)
->
file
->
ha_external_lock
(
thd
,
lock_type
)))
{
print_lock_error
(
error
,
(
*
tables
)
->
file
->
table_type
());
for
(;
i
--
;
tables
--
)
while
(
--
i
)
{
tables
--
;
(
*
tables
)
->
file
->
ha_external_lock
(
thd
,
F_UNLCK
);
(
*
tables
)
->
current_lock
=
F_UNLCK
;
}
...
...
storage/myisammrg/myrg_locking.c
View file @
5c83b14b
...
...
@@ -37,7 +37,15 @@ int myrg_lock_database(MYRG_INFO *info, int lock_type)
(
file
->
table
)
->
owned_by_merge
=
TRUE
;
#endif
if
((
new_error
=
mi_lock_database
(
file
->
table
,
lock_type
)))
{
error
=
new_error
;
if
(
lock_type
!=
F_UNLCK
)
{
while
(
--
file
>=
info
->
open_tables
)
mi_lock_database
(
file
->
table
,
F_UNLCK
);
break
;
}
}
}
return
(
error
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment