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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
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
Hide 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 @@
...
@@ -9,6 +9,3 @@
# Do not use any TAB characters for whitespace.
# 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)
...
@@ -4383,7 +4383,10 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
trans
=
ndb
->
startTransaction
();
trans
=
ndb
->
startTransaction
();
if
(
trans
==
NULL
)
if
(
trans
==
NULL
)
{
thd_ndb
->
lock_count
=
0
;
ERR_RETURN
(
ndb
->
getNdbError
());
ERR_RETURN
(
ndb
->
getNdbError
());
}
thd_ndb
->
init_open_tables
();
thd_ndb
->
init_open_tables
();
thd_ndb
->
stmt
=
trans
;
thd_ndb
->
stmt
=
trans
;
thd_ndb
->
query_state
&=
NDB_QUERY_NORMAL
;
thd_ndb
->
query_state
&=
NDB_QUERY_NORMAL
;
...
@@ -4409,7 +4412,10 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
...
@@ -4409,7 +4412,10 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
trans
=
ndb
->
startTransaction
();
trans
=
ndb
->
startTransaction
();
if
(
trans
==
NULL
)
if
(
trans
==
NULL
)
{
thd_ndb
->
lock_count
=
0
;
ERR_RETURN
(
ndb
->
getNdbError
());
ERR_RETURN
(
ndb
->
getNdbError
());
}
thd_ndb
->
init_open_tables
();
thd_ndb
->
init_open_tables
();
thd_ndb
->
all
=
trans
;
thd_ndb
->
all
=
trans
;
thd_ndb
->
query_state
&=
NDB_QUERY_NORMAL
;
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,
...
@@ -1142,6 +1142,12 @@ int ha_partition::prepare_new_partition(TABLE *table,
create_flag
=
TRUE
;
create_flag
=
TRUE
;
if
((
error
=
file
->
ha_open
(
table
,
part_name
,
m_mode
,
m_open_test_lock
)))
if
((
error
=
file
->
ha_open
(
table
,
part_name
,
m_mode
,
m_open_test_lock
)))
goto
error
;
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
)))
if
((
error
=
file
->
external_lock
(
current_thd
,
m_lock_type
)))
goto
error
;
goto
error
;
...
@@ -1164,6 +1170,14 @@ error:
...
@@ -1164,6 +1170,14 @@ error:
NONE
NONE
DESCRIPTION
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:
TODO:
We must ensure that in the case that we get an error during the process
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
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)
...
@@ -1182,7 +1196,6 @@ void ha_partition::cleanup_new_partition(uint part_count)
m_file
=
m_added_file
;
m_file
=
m_added_file
;
m_added_file
=
NULL
;
m_added_file
=
NULL
;
external_lock
(
current_thd
,
F_UNLCK
);
/* delete_table also needed, a bit more complex */
/* delete_table also needed, a bit more complex */
close
();
close
();
...
...
sql/lock.cc
View file @
5c83b14b
...
@@ -60,6 +60,11 @@
...
@@ -60,6 +60,11 @@
- When calling UNLOCK TABLES we call mysql_unlock_tables() for all
- When calling UNLOCK TABLES we call mysql_unlock_tables() for all
tables used in LOCK TABLES
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:
TODO:
Change to use my_malloc() ONLY when using LOCK TABLES command or when
Change to use my_malloc() ONLY when using LOCK TABLES command or when
we are forced to use mysql_lock_merge.
we are forced to use mysql_lock_merge.
...
@@ -269,8 +274,9 @@ static int lock_external(THD *thd, TABLE **tables, uint count)
...
@@ -269,8 +274,9 @@ static int lock_external(THD *thd, TABLE **tables, uint count)
if
((
error
=
(
*
tables
)
->
file
->
ha_external_lock
(
thd
,
lock_type
)))
if
((
error
=
(
*
tables
)
->
file
->
ha_external_lock
(
thd
,
lock_type
)))
{
{
print_lock_error
(
error
,
(
*
tables
)
->
file
->
table_type
());
print_lock_error
(
error
,
(
*
tables
)
->
file
->
table_type
());
for
(;
i
--
;
tables
--
)
while
(
--
i
)
{
{
tables
--
;
(
*
tables
)
->
file
->
ha_external_lock
(
thd
,
F_UNLCK
);
(
*
tables
)
->
file
->
ha_external_lock
(
thd
,
F_UNLCK
);
(
*
tables
)
->
current_lock
=
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)
...
@@ -37,7 +37,15 @@ int myrg_lock_database(MYRG_INFO *info, int lock_type)
(
file
->
table
)
->
owned_by_merge
=
TRUE
;
(
file
->
table
)
->
owned_by_merge
=
TRUE
;
#endif
#endif
if
((
new_error
=
mi_lock_database
(
file
->
table
,
lock_type
)))
if
((
new_error
=
mi_lock_database
(
file
->
table
,
lock_type
)))
{
error
=
new_error
;
error
=
new_error
;
if
(
lock_type
!=
F_UNLCK
)
{
while
(
--
file
>=
info
->
open_tables
)
mi_lock_database
(
file
->
table
,
F_UNLCK
);
break
;
}
}
}
}
return
(
error
);
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