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
731c8da0
Commit
731c8da0
authored
Apr 27, 2005
by
ingo@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug#7823 - FLUSH TABLES WITH READ LOCK + INSERT DELAYED = deadlock
After merge fix.
parent
15f9556c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
54 additions
and
4 deletions
+54
-4
sql/lock.cc
sql/lock.cc
+49
-2
sql/mysql_priv.h
sql/mysql_priv.h
+4
-1
sql/sql_insert.cc
sql/sql_insert.cc
+1
-1
No files found.
sql/lock.cc
View file @
731c8da0
...
@@ -82,7 +82,8 @@ static int unlock_external(THD *thd, TABLE **table,uint count);
...
@@ -82,7 +82,8 @@ static int unlock_external(THD *thd, TABLE **table,uint count);
static
void
print_lock_error
(
int
error
,
const
char
*
);
static
void
print_lock_error
(
int
error
,
const
char
*
);
MYSQL_LOCK
*
mysql_lock_tables
(
THD
*
thd
,
TABLE
**
tables
,
uint
count
)
MYSQL_LOCK
*
mysql_lock_tables
(
THD
*
thd
,
TABLE
**
tables
,
uint
count
,
bool
ignore_global_read_lock
)
{
{
MYSQL_LOCK
*
sql_lock
;
MYSQL_LOCK
*
sql_lock
;
TABLE
*
write_lock_used
;
TABLE
*
write_lock_used
;
...
@@ -93,7 +94,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd,TABLE **tables,uint count)
...
@@ -93,7 +94,7 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd,TABLE **tables,uint count)
if
(
!
(
sql_lock
=
get_lock_data
(
thd
,
tables
,
count
,
0
,
&
write_lock_used
)))
if
(
!
(
sql_lock
=
get_lock_data
(
thd
,
tables
,
count
,
0
,
&
write_lock_used
)))
break
;
break
;
if
(
global_read_lock
&&
write_lock_used
)
if
(
global_read_lock
&&
write_lock_used
&&
!
ignore_global_read_lock
)
{
{
/*
/*
Someone has issued LOCK ALL TABLES FOR READ and we want a write lock
Someone has issued LOCK ALL TABLES FOR READ and we want a write lock
...
@@ -949,3 +950,49 @@ bool make_global_read_lock_block_commit(THD *thd)
...
@@ -949,3 +950,49 @@ bool make_global_read_lock_block_commit(THD *thd)
DBUG_RETURN
(
error
);
DBUG_RETURN
(
error
);
}
}
/*
Set protection against global read lock.
SYNOPSIS
set_protect_against_global_read_lock()
void
RETURN
FALSE OK, no global read lock exists.
TRUE Error, global read lock exists already.
*/
bool
set_protect_against_global_read_lock
(
void
)
{
bool
global_read_lock_exists
;
pthread_mutex_lock
(
&
LOCK_open
);
if
(
!
(
global_read_lock_exists
=
test
(
global_read_lock
)))
protect_against_global_read_lock
++
;
pthread_mutex_unlock
(
&
LOCK_open
);
return
global_read_lock_exists
;
}
/*
Unset protection against global read lock.
SYNOPSIS
unset_protect_against_global_read_lock()
void
RETURN
void
*/
void
unset_protect_against_global_read_lock
(
void
)
{
pthread_mutex_lock
(
&
LOCK_open
);
protect_against_global_read_lock
--
;
pthread_mutex_unlock
(
&
LOCK_open
);
pthread_cond_broadcast
(
&
COND_refresh
);
}
sql/mysql_priv.h
View file @
731c8da0
...
@@ -1151,7 +1151,8 @@ extern pthread_t signal_thread;
...
@@ -1151,7 +1151,8 @@ extern pthread_t signal_thread;
extern
struct
st_VioSSLAcceptorFd
*
ssl_acceptor_fd
;
extern
struct
st_VioSSLAcceptorFd
*
ssl_acceptor_fd
;
#endif
/* HAVE_OPENSSL */
#endif
/* HAVE_OPENSSL */
MYSQL_LOCK
*
mysql_lock_tables
(
THD
*
thd
,
TABLE
**
table
,
uint
count
);
MYSQL_LOCK
*
mysql_lock_tables
(
THD
*
thd
,
TABLE
**
table
,
uint
count
,
bool
ignore_global_read_lock
=
FALSE
);
void
mysql_unlock_tables
(
THD
*
thd
,
MYSQL_LOCK
*
sql_lock
);
void
mysql_unlock_tables
(
THD
*
thd
,
MYSQL_LOCK
*
sql_lock
);
void
mysql_unlock_read_tables
(
THD
*
thd
,
MYSQL_LOCK
*
sql_lock
);
void
mysql_unlock_read_tables
(
THD
*
thd
,
MYSQL_LOCK
*
sql_lock
);
void
mysql_unlock_some_tables
(
THD
*
thd
,
TABLE
**
table
,
uint
count
);
void
mysql_unlock_some_tables
(
THD
*
thd
,
TABLE
**
table
,
uint
count
);
...
@@ -1165,6 +1166,8 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh,
...
@@ -1165,6 +1166,8 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh,
bool
is_not_commit
);
bool
is_not_commit
);
void
start_waiting_global_read_lock
(
THD
*
thd
);
void
start_waiting_global_read_lock
(
THD
*
thd
);
bool
make_global_read_lock_block_commit
(
THD
*
thd
);
bool
make_global_read_lock_block_commit
(
THD
*
thd
);
bool
set_protect_against_global_read_lock
(
void
);
void
unset_protect_against_global_read_lock
(
void
);
/* Lock based on name */
/* Lock based on name */
int
lock_and_wait_for_table_name
(
THD
*
thd
,
TABLE_LIST
*
table_list
);
int
lock_and_wait_for_table_name
(
THD
*
thd
,
TABLE_LIST
*
table_list
);
...
...
sql/sql_insert.cc
View file @
731c8da0
...
@@ -1213,7 +1213,7 @@ static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list)
...
@@ -1213,7 +1213,7 @@ static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list)
}
}
pthread_mutex_lock
(
&
tmp
->
mutex
);
pthread_mutex_lock
(
&
tmp
->
mutex
);
table
=
tmp
->
get_local_table
(
thd
);
table
=
tmp
->
get_local_table
(
thd
);
pthread_mutex_unlock
(
&
tmp
->
mutex
);
pthread_mutex_unlock
(
&
tmp
->
mutex
);
if
(
table
)
if
(
table
)
thd
->
di
=
tmp
;
thd
->
di
=
tmp
;
...
...
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