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
d37a5c4d
Commit
d37a5c4d
authored
Oct 08, 2003
by
monty@narttu.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Indentation cleanups
Remove wait_if_global_read_lock on commit as this can cause deadlocks
parent
dc6f0725
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
40 additions
and
47 deletions
+40
-47
BUILD/FINISH.sh
BUILD/FINISH.sh
+1
-1
BUILD/SETUP.sh
BUILD/SETUP.sh
+2
-2
BUILD/compile-pentium-valgrind-max
BUILD/compile-pentium-valgrind-max
+11
-21
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+0
-1
mysql-test/r/rpl_max_relay_size.result
mysql-test/r/rpl_max_relay_size.result
+2
-2
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+3
-1
mysql-test/t/rpl_max_relay_size.test
mysql-test/t/rpl_max_relay_size.test
+2
-0
sql/handler.cc
sql/handler.cc
+0
-3
sql/opt_range.cc
sql/opt_range.cc
+5
-5
sql/sql_db.cc
sql/sql_db.cc
+7
-7
sql/sql_parse.cc
sql/sql_parse.cc
+4
-1
sql/sql_repl.cc
sql/sql_repl.cc
+2
-2
sql/sql_select.cc
sql/sql_select.cc
+1
-1
No files found.
BUILD/FINISH.sh
View file @
d37a5c4d
...
...
@@ -49,7 +49,7 @@ strip sql/mysqld"
fi
fi
if
test
-z
"
$
nonono
"
if
test
-z
"
$
just_print
"
then
eval
"set -x;
$commands
"
else
...
...
BUILD/SETUP.sh
View file @
d37a5c4d
...
...
@@ -4,13 +4,13 @@ then
exit
1
fi
nonono
=
just_print
=
just_configure
=
while
test
$#
-gt
0
do
case
"
$1
"
in
-c
|
--just-configure
)
just_configure
=
1
;
shift
;;
-n
|
--just-print
|
--print
)
nonono
=
1
;
shift
;;
-n
|
--just-print
|
--print
)
just_print
=
1
;
shift
;;
-h
|
--help
)
cat
<<
EOF
; exit 0 ;;
Usage:
$0
[-h|-n] [configure-options]
-h, --help Show this help message.
...
...
BUILD/compile-pentium-valgrind-max
View file @
d37a5c4d
#! /bin/sh
echo
"
\
********************************************************************************
Note that by default BUILD/compile-pentium-valgrind-max calls 'configure' with
--enable-assembler. When Valgrind detects an error involving an assembly
function (for example an uninitialized value used as an argument of an assembly
function), Valgrind will not print the stacktrace and 'valgrind
--gdb-attach=yes' will not work either. If you need a stacktrace in those cases,
you have to run BUILD/compile-pentium-valgrind-max with the --disable-assembler
argument.
********************************************************************************
"
path
=
`
dirname
$0
`
.
"
$path
/SETUP.sh"
...
...
@@ -24,14 +12,16 @@ extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --
.
"
$path
/FINISH.sh"
echo
"
\
********************************************************************************
if
test
-z
"
$just_print
"
then
echo
"
\
******************************************************************************
Note that by default BUILD/compile-pentium-valgrind-max calls 'configure' with
--enable-assembler. When Valgrind detects an error involving an assembly
function (for example an uninitialized value used as an argument of an
assembly
function), Valgrind will not print the stacktrace and 'valgrind
--gdb-attach=yes' will not work either. If you need a stacktrace in those
cases,
you have to run BUILD/compile-pentium-valgrind-max with the --disable-assembler
argument.
******************************************************************************
**
"
function (for example an uninitialized value used as an argument of an
assembly
function), Valgrind will not print the stacktrace and 'valgrind
--gdb-attach=yes' will not work either. If you need a stacktrace in those
cases, you have to run BUILD/compile-pentium-valgrind-max with the
--disable-assembler
argument.
******************************************************************************
"
fi
mysql-test/r/innodb.result
View file @
d37a5c4d
...
...
@@ -256,7 +256,6 @@ start transaction;
insert into t1 values (4);
flush tables with read lock;
commit;
ERROR HY000: Can't execute the query because you have a conflicting read lock
unlock tables;
commit;
select * from t1;
...
...
mysql-test/r/rpl_max_relay_size.result
View file @
d37a5c4d
...
...
@@ -49,12 +49,12 @@ flush logs;
create table t1 (a int);
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Until_condition Until_Log_File Until_Log_pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50535 slave-relay-bin.000009 62 master-bin.000001 Yes Yes 0 0 50535
62
None 0 No
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50535 slave-relay-bin.000009 62 master-bin.000001 Yes Yes 0 0 50535
#
None 0 No
flush logs;
drop table t1;
show slave status;
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Until_condition Until_Log_File Until_Log_pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50583 slave-relay-bin.000010 52 master-bin.000001 Yes Yes 0 0 50583
52
None 0 No
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50583 slave-relay-bin.000010 52 master-bin.000001 Yes Yes 0 0 50583
#
None 0 No
flush logs;
show master status;
File Position Binlog_do_db Binlog_ignore_db
...
...
mysql-test/t/innodb.test
View file @
d37a5c4d
...
...
@@ -141,7 +141,9 @@ create table t1 (n int not null primary key) type=innodb;
start
transaction
;
insert
into
t1
values
(
4
);
flush
tables
with
read
lock
;
--
error
1223
;
#
# Current code can't handle a read lock in middle of transaction
#--error 1223;
commit
;
unlock
tables
;
commit
;
...
...
mysql-test/t/rpl_max_relay_size.test
View file @
d37a5c4d
...
...
@@ -70,6 +70,7 @@ save_master_pos;
connection
slave
;
sync_with_master
;
--
replace_result
$MASTER_MYPORT
MASTER_PORT
3306
MASTER_PORT
3334
MASTER_PORT
--
replace_column
22
#
show
slave
status
;
# one more rotation, to be sure Relay_log_space is correctly updated
flush
logs
;
...
...
@@ -79,6 +80,7 @@ save_master_pos;
connection
slave
;
sync_with_master
;
--
replace_result
$MASTER_MYPORT
MASTER_PORT
3306
MASTER_PORT
3334
MASTER_PORT
--
replace_column
22
#
show
slave
status
;
connection
master
;
...
...
sql/handler.cc
View file @
d37a5c4d
...
...
@@ -359,10 +359,7 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
if
(
trans
==
&
thd
->
transaction
.
all
&&
mysql_bin_log
.
is_open
()
&&
my_b_tell
(
&
thd
->
transaction
.
trans_log
))
{
if
(
wait_if_global_read_lock
(
thd
,
0
))
DBUG_RETURN
(
1
);
mysql_bin_log
.
write
(
thd
,
&
thd
->
transaction
.
trans_log
,
1
);
start_waiting_global_read_lock
(
thd
);
reinit_io_cache
(
&
thd
->
transaction
.
trans_log
,
WRITE_CACHE
,
(
my_off_t
)
0
,
0
,
1
);
thd
->
transaction
.
trans_log
.
end_of_file
=
max_binlog_cache_size
;
...
...
sql/opt_range.cc
View file @
d37a5c4d
...
...
@@ -456,7 +456,7 @@ SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg)
SEL_ARG
*
tmp
;
if
(
type
!=
KEY_RANGE
)
{
if
(
!
(
tmp
=
new
SEL_ARG
(
type
)))
if
(
!
(
tmp
=
new
SEL_ARG
(
type
)))
return
0
;
// out of memory
tmp
->
prev
=
*
next_arg
;
// Link into next/prev chain
(
*
next_arg
)
->
next
=
tmp
;
...
...
@@ -464,7 +464,7 @@ SEL_ARG *SEL_ARG::clone(SEL_ARG *new_parent,SEL_ARG **next_arg)
}
else
{
if
(
!
(
tmp
=
new
SEL_ARG
(
field
,
part
,
min_value
,
max_value
,
if
(
!
(
tmp
=
new
SEL_ARG
(
field
,
part
,
min_value
,
max_value
,
min_flag
,
max_flag
,
maybe_flag
)))
return
0
;
// out of memory
tmp
->
parent
=
new_parent
;
...
...
@@ -920,7 +920,7 @@ get_mm_parts(PARAM *param, Field *field, Item_func::Functype type,
}
else
{
// This key may be used later
if
(
!
(
sel_arg
=
new
SEL_ARG
(
SEL_ARG
::
MAYBE_KEY
)))
if
(
!
(
sel_arg
=
new
SEL_ARG
(
SEL_ARG
::
MAYBE_KEY
)))
DBUG_RETURN
(
0
);
// out of memory
}
sel_arg
->
part
=
(
uchar
)
key_part
->
part
;
...
...
@@ -1488,7 +1488,7 @@ key_or(SEL_ARG *key1,SEL_ARG *key2)
SEL_ARG
*
key2_next
=
key2
->
next
;
if
(
key2_shared
)
{
if
(
!
(
key2
=
new
SEL_ARG
(
*
key2
)))
if
(
!
(
key2
=
new
SEL_ARG
(
*
key2
)))
return
0
;
// out of memory
key2
->
increment_use_count
(
key1
->
use_count
+
1
);
key2
->
next
=
key2_next
;
// New copy of key2
...
...
@@ -2333,7 +2333,7 @@ get_quick_keys(PARAM *param,QUICK_SELECT *quick,KEY_PART *key,
}
/* Get range for retrieving rows in QUICK_SELECT::get_next */
if
(
!
(
range
=
new
QUICK_RANGE
(
param
->
min_key
,
if
(
!
(
range
=
new
QUICK_RANGE
(
param
->
min_key
,
(
uint
)
(
tmp_min_key
-
param
->
min_key
),
param
->
max_key
,
(
uint
)
(
tmp_max_key
-
param
->
max_key
),
...
...
sql/sql_db.cc
View file @
d37a5c4d
...
...
@@ -393,16 +393,16 @@ exit:
start_waiting_global_read_lock
(
thd
);
/*
If this database was the client's selected database, we silently change the
client's selected database to nothing (to have an empty SELECT DATABASE()
in
the future). For this we free() thd->db and set it to 0. But we don't do
client's selected database to nothing (to have an empty SELECT DATABASE()
in
the future). For this we free() thd->db and set it to 0. But we don't do
free() for the slave thread. Indeed, doing a x_free() on it leads to nasty
problems (i.e. long painful debugging) because in this thread, thd->db is
the same as data_buf and db of the Query_log_event which is dropping the
database. So if you free() thd->db, you're freeing data_buf. You set
thd->db
t
o 0 but not data_buf (thd->db and data_buf are two distinct pointers which
point
to the same place). Then in ~Query_log_event(), we hav
e
'if (data_buf) free(data_buf)'
data_buf is !=0 so this makes a
DOUBLE free().
database. So if you free() thd->db, you're freeing data_buf. You set
t
hd->db to 0 but not data_buf (thd->db and data_buf are two distinct
point
ers which point to the same place). Then in ~Query_log_event(), w
e
have 'if (data_buf) free(data_buf)' data_buf is !=0 so this makes a
DOUBLE free().
Side effects of this double free() are, randomly (depends on the machine),
when the slave is replicating a DROP DATABASE:
- garbage characters in the error message:
...
...
sql/sql_parse.cc
View file @
d37a5c4d
...
...
@@ -4449,7 +4449,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
{
if
((
options
&
REFRESH_READ_LOCK
)
&&
thd
)
{
// writing to the binlog could cause deadlocks, as we don't log UNLOCK TABLES
/*
Writing to the binlog could cause deadlocks, as we don't log
UNLOCK TABLES
*/
tmp_write_to_binlog
=
0
;
if
(
lock_global_read_lock
(
thd
))
return
1
;
...
...
sql/sql_repl.cc
View file @
d37a5c4d
...
...
@@ -730,7 +730,7 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report)
to p, no digits were found, error. If it contains '\0' it
means conversion went ok.
*/
if
(
p_end
==
p
||
*
p_end
)
if
(
p_end
==
p
||
*
p_end
)
slave_errno
=
ER_BAD_SLAVE_UNTIL_COND
;
}
else
...
...
@@ -753,7 +753,7 @@ int start_slave(THD* thd , MASTER_INFO* mi, bool net_report)
ER
(
ER_UNTIL_COND_IGNORED
));
if
(
!
slave_errno
)
if
(
!
slave_errno
)
slave_errno
=
start_slave_threads
(
0
/*no mutex */
,
1
/* wait for start */
,
mi
,
...
...
sql/sql_select.cc
View file @
d37a5c4d
...
...
@@ -5333,7 +5333,7 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
HAVING will be chcked after processing aggregate functions,
But WHERE should checkd here (we alredy have read tables)
*/
if
(
!
join
->
conds
||
join
->
conds
->
val_int
())
if
(
!
join
->
conds
||
join
->
conds
->
val_int
())
{
if
(
!
(
error
=
(
*
end_select
)(
join
,
join_tab
,
0
))
||
error
==
-
3
)
error
=
(
*
end_select
)(
join
,
join_tab
,
1
);
...
...
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