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
a3233427
Commit
a3233427
authored
Jul 12, 2004
by
marko@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
InnoDB: LOCK TABLE clean-up
parent
bea2f430
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
36 additions
and
30 deletions
+36
-30
innobase/include/lock0lock.h
innobase/include/lock0lock.h
+3
-2
innobase/include/row0mysql.h
innobase/include/row0mysql.h
+4
-3
innobase/include/trx0trx.h
innobase/include/trx0trx.h
+3
-2
innobase/lock/lock0lock.c
innobase/lock/lock0lock.c
+17
-15
innobase/row/row0mysql.c
innobase/row/row0mysql.c
+5
-4
innobase/trx/trx0trx.c
innobase/trx/trx0trx.c
+2
-2
sql/ha_innodb.cc
sql/ha_innodb.cc
+2
-2
No files found.
innobase/include/lock0lock.h
View file @
a3233427
...
...
@@ -418,7 +418,8 @@ lock_release_off_kernel(
/*====================*/
trx_t
*
trx
);
/* in: transaction */
/*************************************************************************
Releases table locks, and releases possible other transactions waiting
Releases table locks explicitly requested with LOCK TABLES (indicated by
lock type LOCK_TABLE_EXP), and releases possible other transactions waiting
because of these locks. */
void
...
...
@@ -548,7 +549,7 @@ extern lock_sys_t* lock_sys;
/* Lock types */
#define LOCK_TABLE 16
/* these type values should be so high that */
#define LOCK_REC 32
/* they can be ORed to the lock mode */
#define LOCK_TABLE_EXP 80
/* explicit table lock */
#define LOCK_TABLE_EXP 80
/* explicit table lock
(80 = 16 + 64)
*/
#define LOCK_TYPE_MASK 0xF0UL
/* mask used to extract lock type from the
type_mode field in a lock */
/* Waiting lock flag */
...
...
innobase/include/row0mysql.h
View file @
a3233427
...
...
@@ -153,11 +153,12 @@ row_lock_table_autoinc_for_mysql(
row_prebuilt_t
*
prebuilt
);
/* in: prebuilt struct in the MySQL
table handle */
/*************************************************************************
Unlocks a table lock possibly reserved by trx. */
Unlocks all table locks explicitly requested by trx (with LOCK TABLES,
lock type LOCK_TABLE_EXP). */
void
row_unlock_table_for_mysql
(
/*=======================*/
row_unlock_table
s
_for_mysql
(
/*=======================
=
*/
trx_t
*
trx
);
/* in: transaction */
/*************************************************************************
Sets a table lock on the table mentioned in prebuilt. */
...
...
innobase/include/trx0trx.h
View file @
a3233427
...
...
@@ -423,8 +423,9 @@ struct trx_struct{
lock_t
*
auto_inc_lock
;
/* possible auto-inc lock reserved by
the transaction; note that it is also
in the lock list trx_locks */
ulint
n_tables_locked
;
/* number of table locks reserved by
the transaction, stored in trx_locks */
ulint
n_lock_table_exp
;
/* number of explicit table locks
(LOCK TABLES) reserved by the
transaction, stored in trx_locks */
UT_LIST_NODE_T
(
trx_t
)
trx_list
;
/* list of transactions */
UT_LIST_NODE_T
(
trx_t
)
...
...
innobase/lock/lock0lock.c
View file @
a3233427
...
...
@@ -2023,9 +2023,8 @@ lock_grant(
lock
->
trx
->
auto_inc_lock
=
lock
;
}
else
if
(
lock_get_type
(
lock
)
==
LOCK_TABLE_EXP
)
{
ut_a
d
(
lock_get_mode
(
lock
)
==
LOCK_S
ut_a
(
lock_get_mode
(
lock
)
==
LOCK_S
||
lock_get_mode
(
lock
)
==
LOCK_X
);
lock
->
trx
->
n_tables_locked
++
;
}
if
(
lock_print_waits
)
{
...
...
@@ -3203,6 +3202,10 @@ lock_table_create(
lock
->
type_mode
=
type_mode
|
LOCK_TABLE
;
lock
->
trx
=
trx
;
if
((
lock
->
type_mode
&
LOCK_TABLE_EXP
)
==
LOCK_TABLE_EXP
)
{
lock
->
trx
->
n_lock_table_exp
++
;
}
lock
->
un_member
.
tab_lock
.
table
=
table
;
UT_LIST_ADD_LAST
(
un_member
.
tab_lock
.
locks
,
table
->
locks
,
lock
);
...
...
@@ -3386,7 +3389,7 @@ lock_table(
return
(
DB_SUCCESS
);
}
ut_a
d
(
flags
==
0
||
flags
==
LOCK_TABLE_EXP
);
ut_a
(
flags
==
0
||
flags
==
LOCK_TABLE_EXP
);
trx
=
thr_get_trx
(
thr
);
...
...
@@ -3418,10 +3421,7 @@ lock_table(
lock_table_create
(
table
,
mode
|
flags
,
trx
);
if
(
flags
)
{
ut_ad
(
mode
==
LOCK_S
||
mode
==
LOCK_X
);
trx
->
n_tables_locked
++
;
}
ut_a
(
!
flags
||
mode
==
LOCK_S
||
mode
==
LOCK_X
);
lock_mutex_exit_kernel
();
...
...
@@ -3502,7 +3502,7 @@ lock_table_dequeue(
#ifdef UNIV_SYNC_DEBUG
ut_ad
(
mutex_own
(
&
kernel_mutex
));
#endif
/* UNIV_SYNC_DEBUG */
ut_a
d
(
lock_get_type
(
in_lock
)
==
LOCK_TABLE
||
ut_a
(
lock_get_type
(
in_lock
)
==
LOCK_TABLE
||
lock_get_type
(
in_lock
)
==
LOCK_TABLE_EXP
);
lock
=
UT_LIST_GET_NEXT
(
un_member
.
tab_lock
.
locks
,
in_lock
);
...
...
@@ -3607,9 +3607,9 @@ lock_release_off_kernel(
lock_table_dequeue
(
lock
);
if
(
lock_get_type
(
lock
)
==
LOCK_TABLE_EXP
)
{
ut_a
d
(
lock_get_mode
(
lock
)
==
LOCK_S
ut_a
(
lock_get_mode
(
lock
)
==
LOCK_S
||
lock_get_mode
(
lock
)
==
LOCK_X
);
trx
->
n_
tables_locked
--
;
trx
->
n_
lock_table_exp
--
;
}
}
...
...
@@ -3630,11 +3630,12 @@ lock_release_off_kernel(
mem_heap_empty
(
trx
->
lock_heap
);
ut_a
(
trx
->
auto_inc_lock
==
NULL
);
ut_a
(
trx
->
n_
tables_locked
==
0
);
ut_a
(
trx
->
n_
lock_table_exp
==
0
);
}
/*************************************************************************
Releases table locks, and releases possible other transactions waiting
Releases table locks explicitly requested with LOCK TABLES (indicated by
lock type LOCK_TABLE_EXP), and releases possible other transactions waiting
because of these locks. */
void
...
...
@@ -3659,7 +3660,7 @@ lock_release_tables_off_kernel(
count
++
;
if
(
lock_get_type
(
lock
)
==
LOCK_TABLE_EXP
)
{
ut_a
d
(
lock_get_mode
(
lock
)
==
LOCK_S
ut_a
(
lock_get_mode
(
lock
)
==
LOCK_S
||
lock_get_mode
(
lock
)
==
LOCK_X
);
if
(
trx
->
insert_undo
||
trx
->
update_undo
)
{
...
...
@@ -3675,7 +3676,8 @@ lock_release_tables_off_kernel(
}
lock_table_dequeue
(
lock
);
trx
->
n_tables_locked
--
;
trx
->
n_lock_table_exp
--
;
lock
=
UT_LIST_GET_LAST
(
trx
->
trx_locks
);
continue
;
}
...
...
@@ -3696,7 +3698,7 @@ lock_release_tables_off_kernel(
mem_heap_empty
(
trx
->
lock_heap
);
ut_a
(
trx
->
n_
tables_locked
==
0
);
ut_a
(
trx
->
n_
lock_table_exp
==
0
);
}
/*************************************************************************
...
...
innobase/row/row0mysql.c
View file @
a3233427
...
...
@@ -723,14 +723,15 @@ run_again:
}
/*************************************************************************
Unlocks a table lock possibly reserved by trx. */
Unlocks all table locks explicitly requested by trx (with LOCK TABLES,
lock type LOCK_TABLE_EXP). */
void
row_unlock_table_for_mysql
(
/*=======================*/
row_unlock_table
s
_for_mysql
(
/*=======================
=
*/
trx_t
*
trx
)
/* in: transaction */
{
if
(
!
trx
->
n_
tables_locked
)
{
if
(
!
trx
->
n_
lock_table_exp
)
{
return
;
}
...
...
innobase/trx/trx0trx.c
View file @
a3233427
...
...
@@ -151,7 +151,7 @@ trx_create(
trx
->
n_tickets_to_enter_innodb
=
0
;
trx
->
auto_inc_lock
=
NULL
;
trx
->
n_
tables_locked
=
0
;
trx
->
n_
lock_table_exp
=
0
;
trx
->
read_view_heap
=
mem_heap_create
(
256
);
trx
->
read_view
=
NULL
;
...
...
@@ -279,7 +279,7 @@ trx_free(
ut_a
(
!
trx
->
has_search_latch
);
ut_a
(
!
trx
->
auto_inc_lock
);
ut_a
(
!
trx
->
n_
tables_locked
);
ut_a
(
!
trx
->
n_
lock_table_exp
);
ut_a
(
trx
->
dict_operation_lock_mode
==
0
);
...
...
sql/ha_innodb.cc
View file @
a3233427
...
...
@@ -4656,8 +4656,8 @@ ha_innobase::external_lock(
trx
->
n_mysql_tables_in_use
--
;
prebuilt
->
mysql_has_locked
=
FALSE
;
auto_inc_counter_for_this_stat
=
0
;
if
(
trx
->
n_
tables_locked
)
{
row_unlock_table_for_mysql
(
trx
);
if
(
trx
->
n_
lock_table_exp
)
{
row_unlock_table
s
_for_mysql
(
trx
);
}
/* If the MySQL lock count drops to zero we know that the current SQL
...
...
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