mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Merge MariaDB 5.1.41-rc release into main, bumping configure.in version number.
This commit is contained in:
commit
95c4b56a0a
28 changed files with 666 additions and 139 deletions
|
@ -34,6 +34,7 @@ EXTRA_DIST = FINISH.sh \
|
|||
compile-amd64-max \
|
||||
compile-amd64-max-sci \
|
||||
compile-amd64-valgrind-max \
|
||||
compile-bintar \
|
||||
compile-darwin-mwcc \
|
||||
compile-dist \
|
||||
compile-hpux11-parisc2-aCC \
|
||||
|
@ -80,7 +81,8 @@ EXTRA_DIST = FINISH.sh \
|
|||
compile-solaris-x86-32 \
|
||||
compile-solaris-x86-32-debug \
|
||||
compile-solaris-x86-32-debug-forte \
|
||||
compile-solaris-x86-forte-32
|
||||
compile-solaris-x86-forte-32 \
|
||||
util.sh
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
|
|
@ -86,15 +86,9 @@ set -e
|
|||
#
|
||||
path=`dirname $0`
|
||||
. "$path/check-cpu"
|
||||
. "$path/util.sh"
|
||||
|
||||
export AM_MAKEFLAGS
|
||||
# Default to a parallel build, but only if AM_MAKEFLAGS is not set.
|
||||
# (So buildbots can easily disable this behaviour if required.)
|
||||
if test -z "$AM_MAKEFLAGS"
|
||||
then
|
||||
AM_MAKEFLAGS="-j 6"
|
||||
fi
|
||||
|
||||
get_make_parallel_flag
|
||||
|
||||
# SSL library to use.--with-ssl will select our bundled yaSSL
|
||||
# implementation of SSL. To use openSSl you will nee too point out
|
||||
|
|
81
BUILD/compile-bintar
Executable file
81
BUILD/compile-bintar
Executable file
|
@ -0,0 +1,81 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# MariaDB SQL server.
|
||||
# Copyright (C) 2010 Kristian Nielsen and Monty Program AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
# This script's purpose is to build the binary tarball packages for MariaDB
|
||||
# (currently only on Linux systems).
|
||||
#
|
||||
# Thus BUILD/compile-bintar from the appropriate source tarball will reproduce
|
||||
# such a release, provided the build environment (gcc version etc.) matches
|
||||
# (use scripts/make_binary_distribution after running this script to actually
|
||||
# create the binary tarball package).
|
||||
#
|
||||
# Note that packages are built from source tarballs not bzr checkouts.
|
||||
# Therefore, this script assumes autotools have already been run.
|
||||
#
|
||||
# We link libc dynamically, otherwise we get lots of problems loading
|
||||
# .so files at runtime (either system stuff like NSS, or server
|
||||
# plugins).
|
||||
#
|
||||
# We link libgcc statically (and avoid linking libstdc++ at all by
|
||||
# CXX=gcc), to avoid reduce nasty library version dependencies.
|
||||
|
||||
test -f Makefile && make distclean
|
||||
|
||||
path=`dirname $0`
|
||||
. $path/util.sh
|
||||
|
||||
SYSTEM_TYPE="$(uname -o)"
|
||||
MACHINE_TYPE="$(uname -m)"
|
||||
|
||||
# We cannot have a slash '/' in tarfile name.
|
||||
SYSTEM_TYPE="$(echo ${SYSTEM_TYPE} | sed -e 's/GNU\///')"
|
||||
|
||||
# Get correct options for architecture into CPUOPT.
|
||||
get_cpuopt
|
||||
# Get correct -j option into AM_MAKEFLAGS
|
||||
get_make_parallel_flag
|
||||
|
||||
# Use gcc rather than g++ to avoid linking libstdc++.so (which we don't need).
|
||||
COMP="gcc -static-libgcc"
|
||||
FLAGS="-O2 -fno-omit-frame-pointer -g -pipe -Wall $CPUOPT"
|
||||
|
||||
# Don't press on in case of error.
|
||||
set -e
|
||||
|
||||
CC="$COMP" CXX="$COMP" CFLAGS="$FLAGS" CXXFLAGS="$FLAGS" \
|
||||
./configure \
|
||||
--prefix=/usr/local/mysql \
|
||||
--exec-prefix=/usr/local/mysql \
|
||||
--libexecdir=/usr/local/mysql/bin \
|
||||
--localstatedir=/usr/local/mysql/data \
|
||||
\
|
||||
--with-comment="(MariaDB - http://mariadb.com/)" \
|
||||
--with-system-type="${SYSTEM_TYPE}" \
|
||||
--with-machine-type="${MACHINE_TYPE}" \
|
||||
\
|
||||
--enable-shared --enable-static \
|
||||
--with-client-ldflags=-static --with-mysqld-ldflags=-static \
|
||||
--enable-thread-safe-client --enable-local-infile --with-big-tables \
|
||||
--without-docs --with-extra-charsets=all \
|
||||
--with-libwrap --with-ssl --with-readline --with-libevent --with-zlib-dir=bundled \
|
||||
--with-partition --with-embedded-server \
|
||||
--with-plugins=max-no-ndb \
|
||||
--without-plugin-innodb_plugin
|
||||
|
||||
make $AM_MAKEFLAGS
|
0
BUILD/compile-solaris-amd64-debug-forte
Normal file → Executable file
0
BUILD/compile-solaris-amd64-debug-forte
Normal file → Executable file
0
BUILD/compile-solaris-x86-32
Normal file → Executable file
0
BUILD/compile-solaris-x86-32
Normal file → Executable file
0
BUILD/compile-solaris-x86-32-debug
Normal file → Executable file
0
BUILD/compile-solaris-x86-32-debug
Normal file → Executable file
0
BUILD/compile-solaris-x86-32-debug-forte
Normal file → Executable file
0
BUILD/compile-solaris-x86-32-debug-forte
Normal file → Executable file
0
BUILD/compile-solaris-x86-forte-32
Normal file → Executable file
0
BUILD/compile-solaris-x86-forte-32
Normal file → Executable file
40
BUILD/util.sh
Normal file
40
BUILD/util.sh
Normal file
|
@ -0,0 +1,40 @@
|
|||
# MariaDB SQL server.
|
||||
# Copyright (C) 2010 Kristian Nielsen and Monty Program AB
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# Setting cpu options.
|
||||
get_cpuopt () {
|
||||
case "$(gcc -dumpmachine)" in
|
||||
x86_64-*)
|
||||
# gcc barfs on -march=... on x64
|
||||
CPUOPT="-m64 -mtune=generic"
|
||||
;;
|
||||
*)
|
||||
# we'd use i586 to not trip up mobile/lowpower devices
|
||||
CPUOPT="-m32 -march=i586 -mtune=generic"
|
||||
;;
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
# Default to a parallel build, but only if AM_MAKEFLAGS is not set.
|
||||
# (So buildbots can easily disable this behaviour if required.)
|
||||
get_make_parallel_flag () {
|
||||
if test -z "$AM_MAKEFLAGS"
|
||||
then
|
||||
AM_MAKEFLAGS="-j 6"
|
||||
fi
|
||||
return 0
|
||||
}
|
|
@ -15,7 +15,7 @@ AC_CANONICAL_SYSTEM
|
|||
# MySQL version number.
|
||||
#
|
||||
# Note: the following line must be parseable by win/configure.js:GetVersion()
|
||||
AM_INIT_AUTOMAKE(mysql, 5.1.41-MariaDB-rc)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.1.41m1-MariaDB-rc)
|
||||
AM_CONFIG_HEADER([include/config.h:config.h.in])
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
|
|
|
@ -25,12 +25,12 @@
|
|||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
|
|
@ -266,7 +266,7 @@ select_add(void *arg, struct event *ev)
|
|||
* of the fd_sets for select(2)
|
||||
*/
|
||||
if (sop->event_fds < ev->ev_fd) {
|
||||
int fdsz = sop->event_fdsz;
|
||||
unsigned int fdsz = sop->event_fdsz;
|
||||
|
||||
if (fdsz < sizeof(fd_mask))
|
||||
fdsz = sizeof(fd_mask);
|
||||
|
@ -275,7 +275,7 @@ select_add(void *arg, struct event *ev)
|
|||
(howmany(ev->ev_fd + 1, NFDBITS) * sizeof(fd_mask)))
|
||||
fdsz *= 2;
|
||||
|
||||
if (fdsz != sop->event_fdsz) {
|
||||
if (fdsz != (unsigned int) sop->event_fdsz) {
|
||||
if (select_resize(sop, fdsz)) {
|
||||
check_selectop(sop);
|
||||
return (-1);
|
||||
|
|
|
@ -4010,6 +4010,7 @@ sub extract_warning_lines ($) {
|
|||
qr/Slave I\/O: error reconnecting to master '.*' - retry-time: [1-3] retries/,
|
||||
qr/Error reading packet/,
|
||||
qr/Slave: Can't drop database.* database doesn't exist/,
|
||||
qr/Slave: Operation DROP USER failed for 'create_rout_db'/,
|
||||
);
|
||||
|
||||
my $matched_lines= [];
|
||||
|
|
|
@ -1,22 +1,4 @@
|
|||
drop table if exists t1,t2;
|
||||
create table t1(n int);
|
||||
insert into t1 values (1);
|
||||
lock tables t1 write;
|
||||
update low_priority t1 set n = 4;
|
||||
select n from t1;
|
||||
unlock tables;
|
||||
n
|
||||
1
|
||||
drop table t1;
|
||||
create table t1(n int);
|
||||
insert into t1 values (1);
|
||||
lock tables t1 read;
|
||||
update low_priority t1 set n = 4;
|
||||
select n from t1;
|
||||
unlock tables;
|
||||
n
|
||||
1
|
||||
drop table t1;
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (c int, d int);
|
||||
insert into t1 values(1,1);
|
||||
|
@ -43,6 +25,7 @@ insert t1 select * from t2;
|
|||
drop table t2;
|
||||
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||
drop table t1;
|
||||
End of 4.1 tests
|
||||
create table t1(a int);
|
||||
lock tables t1 write;
|
||||
show columns from t1;
|
||||
|
@ -50,10 +33,10 @@ Field Type Null Key Default Extra
|
|||
a int(11) YES NULL
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
use mysql;
|
||||
USE mysql;
|
||||
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
|
||||
FLUSH TABLES;
|
||||
use mysql;
|
||||
USE mysql;
|
||||
SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
|
||||
OPTIMIZE TABLES columns_priv, db, host, user;
|
||||
Table Op Msg_type Msg_text
|
||||
|
@ -63,7 +46,8 @@ mysql.host optimize status OK
|
|||
mysql.user optimize status OK
|
||||
UNLOCK TABLES;
|
||||
Select_priv
|
||||
use test;
|
||||
N
|
||||
USE test;
|
||||
use test;
|
||||
CREATE TABLE t1 (c1 int);
|
||||
LOCK TABLE t1 WRITE;
|
||||
|
@ -90,7 +74,115 @@ DROP DATABASE mysqltest_1;
|
|||
ERROR HY000: Can't drop database 'mysqltest_1'; database doesn't exist
|
||||
create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) engine=innodb;
|
||||
lock tables t1 write;
|
||||
alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
|
||||
alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
|
||||
alter table t1 auto_increment=0;
|
||||
alter table t1 auto_increment=0;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
create table t2 like t1;
|
||||
# con1
|
||||
lock tables t1 write;
|
||||
# con2
|
||||
flush tables with read lock;
|
||||
# con5
|
||||
# global read lock is taken
|
||||
# con3
|
||||
select * from t2 for update;
|
||||
# waiting for release of read lock
|
||||
# con4
|
||||
# would hang and later cause a deadlock
|
||||
flush tables t2;
|
||||
# clean up
|
||||
unlock tables;
|
||||
unlock tables;
|
||||
a
|
||||
drop table t1,t2;
|
||||
#
|
||||
# Lightweight version:
|
||||
# Ensure that the wait for a GRL is done before opening tables.
|
||||
#
|
||||
create table t1 (a int);
|
||||
create table t2 like t1;
|
||||
#
|
||||
# UPDATE
|
||||
#
|
||||
# default
|
||||
flush tables with read lock;
|
||||
# con1
|
||||
update t2 set a = 1;
|
||||
# default
|
||||
# statement is waiting for release of read lock
|
||||
# con2
|
||||
flush table t2;
|
||||
# default
|
||||
unlock tables;
|
||||
# con1
|
||||
#
|
||||
# LOCK TABLES .. WRITE
|
||||
#
|
||||
# default
|
||||
flush tables with read lock;
|
||||
# con1
|
||||
lock tables t2 write;
|
||||
# default
|
||||
# statement is waiting for release of read lock
|
||||
# con2
|
||||
flush table t2;
|
||||
# default
|
||||
unlock tables;
|
||||
# con1
|
||||
unlock tables;
|
||||
drop table t1,t2;
|
||||
End of 5.0 tests
|
||||
create table t1 (i int);
|
||||
lock table t1 read;
|
||||
update t1 set i= 10;
|
||||
select * from t1;
|
||||
Timeout in wait_condition.inc for select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "select * from t1"
|
||||
kill query ID;
|
||||
i
|
||||
ERROR 70100: Query execution was interrupted
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
drop table if exists t1;
|
||||
create table t1 (i int);
|
||||
connection: default
|
||||
lock tables t1 write;
|
||||
connection: flush
|
||||
flush tables with read lock;;
|
||||
connection: default
|
||||
alter table t1 add column j int;
|
||||
connection: insert
|
||||
insert into t1 values (1,2);;
|
||||
connection: default
|
||||
unlock tables;
|
||||
connection: flush
|
||||
select * from t1;
|
||||
i j
|
||||
unlock tables;
|
||||
select * from t1;
|
||||
i j
|
||||
1 2
|
||||
drop table t1;
|
||||
drop table if exists t1;
|
||||
create table t1 (i int);
|
||||
connection: default
|
||||
lock tables t1 write;
|
||||
connection: flush
|
||||
flush tables with read lock;;
|
||||
connection: default
|
||||
flush tables;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
drop table if exists t1,t2;
|
||||
create table t1 (a int);
|
||||
flush status;
|
||||
lock tables t1 read;
|
||||
insert into t1 values(1);;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
select @tlwa < @tlwb;
|
||||
@tlwa < @tlwb
|
||||
1
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -1,4 +1,8 @@
|
|||
-- source include/not_embedded.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
@ -9,42 +13,6 @@ connect (locker,localhost,root,,);
|
|||
connect (reader,localhost,root,,);
|
||||
connect (writer,localhost,root,,);
|
||||
|
||||
connection locker;
|
||||
create table t1(n int);
|
||||
insert into t1 values (1);
|
||||
lock tables t1 write;
|
||||
connection writer;
|
||||
send update low_priority t1 set n = 4;
|
||||
connection reader;
|
||||
--sleep 2
|
||||
send select n from t1;
|
||||
connection locker;
|
||||
--sleep 2
|
||||
unlock tables;
|
||||
connection writer;
|
||||
reap;
|
||||
connection reader;
|
||||
reap;
|
||||
drop table t1;
|
||||
|
||||
connection locker;
|
||||
create table t1(n int);
|
||||
insert into t1 values (1);
|
||||
lock tables t1 read;
|
||||
connection writer;
|
||||
send update low_priority t1 set n = 4;
|
||||
connection reader;
|
||||
--sleep 2
|
||||
send select n from t1;
|
||||
connection locker;
|
||||
--sleep 2
|
||||
unlock tables;
|
||||
connection writer;
|
||||
reap;
|
||||
connection reader;
|
||||
reap;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test problem when using locks with multi-updates
|
||||
# It should not block when multi-update is reading on a read-locked table
|
||||
|
@ -58,32 +26,33 @@ insert into t1 values(2,2);
|
|||
insert into t2 values(1,2);
|
||||
lock table t1 read;
|
||||
connection writer;
|
||||
--sleep 2
|
||||
send update t1,t2 set c=a where b=d;
|
||||
update t1,t2 set c=a where b=d;
|
||||
connection reader;
|
||||
--sleep 2
|
||||
select c from t2;
|
||||
connection writer;
|
||||
reap;
|
||||
connection locker;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
#
|
||||
# Test problem when using locks on many tables and droping a table that
|
||||
# Test problem when using locks on many tables and dropping a table that
|
||||
# is to-be-locked by another thread
|
||||
#
|
||||
|
||||
#
|
||||
connection locker;
|
||||
create table t1 (a int);
|
||||
create table t2 (a int);
|
||||
lock table t1 write, t2 write;
|
||||
connection reader;
|
||||
send insert t1 select * from t2;
|
||||
send
|
||||
insert t1 select * from t2;
|
||||
connection locker;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "insert t1 select * from t2";
|
||||
--source include/wait_condition.inc
|
||||
drop table t2;
|
||||
connection reader;
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
reap;
|
||||
connection locker;
|
||||
drop table t1;
|
||||
|
@ -97,20 +66,26 @@ create table t1 (a int);
|
|||
create table t2 (a int);
|
||||
lock table t1 write, t2 write, t1 as t1_2 write, t2 as t2_2 write;
|
||||
connection reader;
|
||||
send insert t1 select * from t2;
|
||||
send
|
||||
insert t1 select * from t2;
|
||||
connection locker;
|
||||
# Sleep a bit till the insert of connection reader is in work and hangs
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "insert t1 select * from t2";
|
||||
--source include/wait_condition.inc
|
||||
drop table t2;
|
||||
connection reader;
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
reap;
|
||||
connection locker;
|
||||
drop table t1;
|
||||
|
||||
|
||||
# End of 4.1 tests
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
# BUG#9998 - MySQL client hangs on USE "database"
|
||||
# Bug#9998 MySQL client hangs on USE "database"
|
||||
#
|
||||
create table t1(a int);
|
||||
lock tables t1 write;
|
||||
|
@ -121,21 +96,30 @@ unlock tables;
|
|||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#16986 - Deadlock condition with MyISAM tables
|
||||
# Bug#16986 Deadlock condition with MyISAM tables
|
||||
#
|
||||
|
||||
# Need a matching user in mysql.user for multi-table select
|
||||
--source include/add_anonymous_users.inc
|
||||
|
||||
connection locker;
|
||||
use mysql;
|
||||
USE mysql;
|
||||
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
|
||||
FLUSH TABLES;
|
||||
--sleep 1
|
||||
#
|
||||
connection reader;
|
||||
use mysql;
|
||||
#NOTE: This must be a multi-table select, otherwise the deadlock will not occur
|
||||
send SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
|
||||
--sleep 1
|
||||
USE mysql;
|
||||
# Note: This must be a multi-table select, otherwise the deadlock will not occur
|
||||
send
|
||||
SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
|
||||
#
|
||||
connection locker;
|
||||
# Sleep a bit till the select of connection reader is in work and hangs
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for table" and info =
|
||||
"SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1";
|
||||
--source include/wait_condition.inc
|
||||
# Make test case independent from earlier grants.
|
||||
--replace_result "Table is already up to date" "OK"
|
||||
OPTIMIZE TABLES columns_priv, db, host, user;
|
||||
|
@ -143,7 +127,7 @@ UNLOCK TABLES;
|
|||
#
|
||||
connection reader;
|
||||
reap;
|
||||
use test;
|
||||
USE test;
|
||||
#
|
||||
connection locker;
|
||||
use test;
|
||||
|
@ -158,11 +142,16 @@ LOCK TABLE t1 WRITE;
|
|||
#
|
||||
# This waits until t1 is unlocked.
|
||||
connection locker;
|
||||
send FLUSH TABLES WITH READ LOCK;
|
||||
--sleep 1
|
||||
send
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
#
|
||||
# This must not block.
|
||||
connection writer;
|
||||
# Sleep a bit till the flush of connection locker is in work and hangs
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables" and info = "FLUSH TABLES WITH READ LOCK";
|
||||
--source include/wait_condition.inc
|
||||
# This must not block.
|
||||
CREATE TABLE t2 (c1 int);
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
|
@ -182,12 +171,17 @@ LOCK TABLE t1 WRITE;
|
|||
#
|
||||
# This waits until t1 is unlocked.
|
||||
connection locker;
|
||||
send FLUSH TABLES WITH READ LOCK;
|
||||
--sleep 1
|
||||
send
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
#
|
||||
# This must not block.
|
||||
connection writer;
|
||||
--error 1100
|
||||
# Sleep a bit till the flush of connection locker is in work and hangs
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables" and info = "FLUSH TABLES WITH READ LOCK";
|
||||
--source include/wait_condition.inc
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
CREATE TABLE t2 AS SELECT * FROM t1;
|
||||
UNLOCK TABLES;
|
||||
#
|
||||
|
@ -199,8 +193,10 @@ UNLOCK TABLES;
|
|||
connection default;
|
||||
DROP TABLE t1;
|
||||
|
||||
--source include/delete_anonymous_users.inc
|
||||
|
||||
#
|
||||
# Bug#19815 - CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
|
||||
# Bug#19815 CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
|
||||
#
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
@ -212,12 +208,18 @@ FLUSH TABLES WITH READ LOCK;
|
|||
# With bug in place: acquire LOCK_mysql_create_table and
|
||||
# wait in wait_if_global_read_lock().
|
||||
connection con2;
|
||||
send DROP DATABASE mysqltest_1;
|
||||
--sleep 1
|
||||
send
|
||||
DROP DATABASE mysqltest_1;
|
||||
#
|
||||
# With bug in place: try to acquire LOCK_mysql_create_table...
|
||||
# When fixed: Reject dropping db because of the read lock.
|
||||
connection con1;
|
||||
# Wait a bit so that the session con2 is in state "Waiting for release of readlock"
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for release of readlock"
|
||||
and info = "DROP DATABASE mysqltest_1";
|
||||
--source include/wait_condition.inc
|
||||
--error ER_CANT_UPDATE_WITH_READLOCK
|
||||
DROP DATABASE mysqltest_1;
|
||||
UNLOCK TABLES;
|
||||
|
@ -234,7 +236,7 @@ disconnect con2;
|
|||
DROP DATABASE mysqltest_1;
|
||||
|
||||
#
|
||||
# Bug #17264: MySQL Server freeze
|
||||
# Bug#17264 MySQL Server freeze
|
||||
#
|
||||
connection locker;
|
||||
# Disable warnings to allow test to run also without InnoDB
|
||||
|
@ -243,17 +245,22 @@ create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) e
|
|||
--enable_warnings
|
||||
lock tables t1 write;
|
||||
connection writer;
|
||||
--sleep 2
|
||||
delimiter //;
|
||||
send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
|
||||
delimiter ;//
|
||||
send
|
||||
alter table t1 auto_increment=0;
|
||||
connection reader;
|
||||
--sleep 2
|
||||
delimiter //;
|
||||
send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
|
||||
delimiter ;//
|
||||
# Wait till connection writer is blocked
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "alter table t1 auto_increment=0";
|
||||
--source include/wait_condition.inc
|
||||
send
|
||||
alter table t1 auto_increment=0;
|
||||
connection locker;
|
||||
--sleep 2
|
||||
# Wait till connection reader is blocked
|
||||
let $wait_condition=
|
||||
select count(*) = 2 from information_schema.processlist
|
||||
where state = "Locked" and info = "alter table t1 auto_increment=0";
|
||||
--source include/wait_condition.inc
|
||||
unlock tables;
|
||||
connection writer;
|
||||
reap;
|
||||
|
@ -262,8 +269,310 @@ reap;
|
|||
connection locker;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#43230: SELECT ... FOR UPDATE can hang with FLUSH TABLES WITH READ LOCK indefinitely
|
||||
#
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
connect (con3,localhost,root,,);
|
||||
connect (con4,localhost,root,,);
|
||||
connect (con5,localhost,root,,);
|
||||
|
||||
create table t1 (a int);
|
||||
create table t2 like t1;
|
||||
|
||||
connection con1;
|
||||
--echo # con1
|
||||
lock tables t1 write;
|
||||
connection con2;
|
||||
--echo # con2
|
||||
send flush tables with read lock;
|
||||
connection con5;
|
||||
--echo # con5
|
||||
let $show_statement= SHOW PROCESSLIST;
|
||||
let $field= State;
|
||||
let $condition= = 'Flushing tables';
|
||||
--source include/wait_show_condition.inc
|
||||
--echo # global read lock is taken
|
||||
connection con3;
|
||||
--echo # con3
|
||||
send select * from t2 for update;
|
||||
connection con5;
|
||||
let $show_statement= SHOW PROCESSLIST;
|
||||
let $field= State;
|
||||
let $condition= = 'Waiting for release of readlock';
|
||||
--source include/wait_show_condition.inc
|
||||
--echo # waiting for release of read lock
|
||||
connection con4;
|
||||
--echo # con4
|
||||
--echo # would hang and later cause a deadlock
|
||||
flush tables t2;
|
||||
connection con1;
|
||||
--echo # clean up
|
||||
unlock tables;
|
||||
connection con2;
|
||||
--reap
|
||||
unlock tables;
|
||||
connection con3;
|
||||
--reap
|
||||
connection default;
|
||||
disconnect con5;
|
||||
disconnect con4;
|
||||
disconnect con3;
|
||||
disconnect con2;
|
||||
disconnect con1;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # Lightweight version:
|
||||
--echo # Ensure that the wait for a GRL is done before opening tables.
|
||||
--echo #
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
create table t1 (a int);
|
||||
create table t2 like t1;
|
||||
|
||||
--echo #
|
||||
--echo # UPDATE
|
||||
--echo #
|
||||
|
||||
connection default;
|
||||
--echo # default
|
||||
flush tables with read lock;
|
||||
connection con1;
|
||||
--echo # con1
|
||||
send update t2 set a = 1;
|
||||
connection default;
|
||||
--echo # default
|
||||
let $show_statement= SHOW PROCESSLIST;
|
||||
let $field= State;
|
||||
let $condition= = 'Waiting for release of readlock';
|
||||
--source include/wait_show_condition.inc
|
||||
--echo # statement is waiting for release of read lock
|
||||
connection con2;
|
||||
--echo # con2
|
||||
flush table t2;
|
||||
connection default;
|
||||
--echo # default
|
||||
unlock tables;
|
||||
connection con1;
|
||||
--echo # con1
|
||||
--reap
|
||||
|
||||
--echo #
|
||||
--echo # LOCK TABLES .. WRITE
|
||||
--echo #
|
||||
|
||||
connection default;
|
||||
--echo # default
|
||||
flush tables with read lock;
|
||||
connection con1;
|
||||
--echo # con1
|
||||
send lock tables t2 write;
|
||||
connection default;
|
||||
--echo # default
|
||||
let $show_statement= SHOW PROCESSLIST;
|
||||
let $field= State;
|
||||
let $condition= = 'Waiting for release of readlock';
|
||||
--source include/wait_show_condition.inc
|
||||
--echo # statement is waiting for release of read lock
|
||||
connection con2;
|
||||
--echo # con2
|
||||
flush table t2;
|
||||
connection default;
|
||||
--echo # default
|
||||
unlock tables;
|
||||
connection con1;
|
||||
--echo # con1
|
||||
--reap
|
||||
unlock tables;
|
||||
|
||||
connection default;
|
||||
disconnect con2;
|
||||
disconnect con1;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
#
|
||||
# Bug#21281 Pending write lock is incorrectly removed when its
|
||||
# statement being KILLed
|
||||
#
|
||||
create table t1 (i int);
|
||||
connection locker;
|
||||
lock table t1 read;
|
||||
connection writer;
|
||||
send
|
||||
update t1 set i= 10;
|
||||
connection reader;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "update t1 set i= 10";
|
||||
--source include/wait_condition.inc
|
||||
send
|
||||
select * from t1;
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "select * from t1";
|
||||
--source include/wait_condition.inc
|
||||
let $ID= `select id from information_schema.processlist where state = "Locked" and info = "update t1 set i= 10"`;
|
||||
--replace_result $ID ID
|
||||
eval kill query $ID;
|
||||
connection reader;
|
||||
--reap
|
||||
connection writer;
|
||||
--error ER_QUERY_INTERRUPTED
|
||||
--reap
|
||||
connection locker;
|
||||
unlock tables;
|
||||
connection default;
|
||||
drop table t1;
|
||||
|
||||
# Disconnect sessions used in many subtests above
|
||||
disconnect locker;
|
||||
disconnect reader;
|
||||
disconnect writer;
|
||||
|
||||
#
|
||||
# Bug#32395 Alter table under a impending global read lock causes a server crash
|
||||
#
|
||||
|
||||
#
|
||||
# Test ALTER TABLE under LOCK TABLES and FLUSH TABLES WITH READ LOCK
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1 (i int);
|
||||
connect (flush,localhost,root,,test,,);
|
||||
connection default;
|
||||
--echo connection: default
|
||||
lock tables t1 write;
|
||||
connection flush;
|
||||
--echo connection: flush
|
||||
--send flush tables with read lock;
|
||||
connection default;
|
||||
--echo connection: default
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables";
|
||||
--source include/wait_condition.inc
|
||||
alter table t1 add column j int;
|
||||
connect (insert,localhost,root,,test,,);
|
||||
connection insert;
|
||||
--echo connection: insert
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables";
|
||||
--source include/wait_condition.inc
|
||||
--send insert into t1 values (1,2);
|
||||
--echo connection: default
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for release of readlock";
|
||||
--source include/wait_condition.inc
|
||||
unlock tables;
|
||||
connection flush;
|
||||
--echo connection: flush
|
||||
--reap
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for release of readlock";
|
||||
--source include/wait_condition.inc
|
||||
select * from t1;
|
||||
unlock tables;
|
||||
connection insert;
|
||||
--reap
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from t1;
|
||||
--source include/wait_condition.inc
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
disconnect flush;
|
||||
disconnect insert;
|
||||
|
||||
#
|
||||
# Test that FLUSH TABLES under LOCK TABLES protects write locked tables
|
||||
# from a impending FLUSH TABLES WITH READ LOCK
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1 (i int);
|
||||
connect (flush,localhost,root,,test,,);
|
||||
connection default;
|
||||
--echo connection: default
|
||||
lock tables t1 write;
|
||||
connection flush;
|
||||
--echo connection: flush
|
||||
--send flush tables with read lock;
|
||||
connection default;
|
||||
--echo connection: default
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables";
|
||||
--source include/wait_condition.inc
|
||||
flush tables;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables";
|
||||
--source include/wait_condition.inc
|
||||
unlock tables;
|
||||
let $wait_condition=
|
||||
select count(*) = 0 from information_schema.processlist
|
||||
where state = "Flushing tables";
|
||||
--source include/wait_condition.inc
|
||||
connection flush;
|
||||
--reap
|
||||
connection default;
|
||||
disconnect flush;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#30331 Table_locks_waited shows inaccurate values
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
flush status;
|
||||
lock tables t1 read;
|
||||
let $tlwa= `show status like 'Table_locks_waited'`;
|
||||
connect (waiter,localhost,root,,);
|
||||
connection waiter;
|
||||
--send insert into t1 values(1);
|
||||
connection default;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "insert into t1 values(1)";
|
||||
--source include/wait_condition.inc
|
||||
let $tlwb= `show status like 'Table_locks_waited'`;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
disconnect waiter;
|
||||
connection default;
|
||||
--disable_query_log
|
||||
eval SET @tlwa= SUBSTRING_INDEX('$tlwa', ' ', -1);
|
||||
eval SET @tlwb= SUBSTRING_INDEX('$tlwb', ' ', -1);
|
||||
drop database pbxt;
|
||||
--enable_query_log
|
||||
# End of 5.0 tests
|
||||
select @tlwa < @tlwb;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
|
|
@ -100,7 +100,8 @@ static const char cur_dir_name[]= {FN_CURLIB, 0};
|
|||
RETURN
|
||||
0 if ok, !=0 if error
|
||||
*/
|
||||
int my_sync_dir(const char *dir_name, myf my_flags)
|
||||
int my_sync_dir(const char *dir_name __attribute__((unused)),
|
||||
myf my_flags __attribute__((unused)))
|
||||
{
|
||||
#ifdef NEED_EXPLICIT_SYNC_DIR
|
||||
DBUG_ENTER("my_sync_dir");
|
||||
|
@ -141,7 +142,8 @@ int my_sync_dir(const char *dir_name, myf my_flags)
|
|||
RETURN
|
||||
0 if ok, !=0 if error
|
||||
*/
|
||||
int my_sync_dir_by_file(const char *file_name, myf my_flags)
|
||||
int my_sync_dir_by_file(const char *file_name __attribute__((unused)),
|
||||
myf my_flags __attribute__((unused)))
|
||||
{
|
||||
#ifdef NEED_EXPLICIT_SYNC_DIR
|
||||
char dir_name[FN_REFLEN];
|
||||
|
|
|
@ -10565,4 +10565,6 @@ mysql_declare_plugin(ndbcluster)
|
|||
}
|
||||
mysql_declare_plugin_end;
|
||||
|
||||
#else
|
||||
int Sun_ar_require_a_symbol_here= 0;
|
||||
#endif
|
||||
|
|
|
@ -33,10 +33,9 @@
|
|||
(zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
|
||||
*/
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
#include "../../mysys/mysys_priv.h"
|
||||
#include <my_dir.h>
|
||||
#include <zlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
@ -6094,7 +6094,7 @@ uint _ma_apply_redo_insert_row_head_or_tail(MARIA_HA *info, LSN lsn,
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (((buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) != page_type))
|
||||
if (((uint) (buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) != page_type))
|
||||
{
|
||||
/*
|
||||
This is a page that has been freed before and now should be
|
||||
|
@ -6241,7 +6241,7 @@ uint _ma_apply_redo_purge_row_head_or_tail(MARIA_HA *info, LSN lsn,
|
|||
Note that in case the page is not anymore a head or tail page
|
||||
a future redo will fix the bitmap.
|
||||
*/
|
||||
if ((buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) == page_type)
|
||||
if ((uint) (buff[PAGE_TYPE_OFFSET] & PAGE_TYPE_MASK) == page_type)
|
||||
{
|
||||
empty_space= uint2korr(buff+EMPTY_SPACE_OFFSET);
|
||||
if (_ma_bitmap_set(info, page, page_type == HEAD_PAGE,
|
||||
|
|
|
@ -2823,8 +2823,8 @@ static my_bool translog_page_validator(uchar *page,
|
|||
|
||||
data->was_recovered= 0;
|
||||
|
||||
if (uint3korr(page) != page_no ||
|
||||
uint3korr(page + 3) != data->number)
|
||||
if ((pgcache_page_no_t) uint3korr(page) != page_no ||
|
||||
(uint32) uint3korr(page + 3) != data->number)
|
||||
{
|
||||
DBUG_PRINT("error", ("Page (%lu,0x%lx): "
|
||||
"page address written in the page is incorrect: "
|
||||
|
|
|
@ -180,7 +180,7 @@ void start_test(int id)
|
|||
if (pagecacheing && rnd(2) == 0)
|
||||
init_pagecache(maria_pagecache, 65536L, 0, 0, MARIA_KEY_BLOCK_LENGTH,
|
||||
MY_WME);
|
||||
printf("Process %d, pid: %d\n",id,getpid()); fflush(stdout);
|
||||
printf("Process %d, pid: %ld\n",id,(long) getpid()); fflush(stdout);
|
||||
|
||||
for (error=i=0 ; i < tests && !error; i++)
|
||||
{
|
||||
|
@ -362,7 +362,7 @@ int test_write(MARIA_HA *file,int id,int lock_type)
|
|||
maria_extra(file,HA_EXTRA_WRITE_CACHE,0);
|
||||
}
|
||||
|
||||
sprintf((char*) record.id,"%7d",getpid());
|
||||
sprintf((char*) record.id,"%7ld", (long) getpid());
|
||||
strnmov((char*) record.text,"Testing...", sizeof(record.text));
|
||||
|
||||
tries=(uint) rnd(100)+10;
|
||||
|
|
|
@ -178,7 +178,8 @@ void start_test(int id)
|
|||
}
|
||||
if (key_cacheing && rnd(2) == 0)
|
||||
init_key_cache(dflt_key_cache, KEY_CACHE_BLOCK_SIZE, 65536L, 0, 0);
|
||||
printf("Process %d, pid: %d\n",id,getpid()); fflush(stdout);
|
||||
printf("Process %d, pid: %ld\n", id, (long) getpid());
|
||||
fflush(stdout);
|
||||
|
||||
for (error=i=0 ; i < tests && !error; i++)
|
||||
{
|
||||
|
@ -362,7 +363,7 @@ int test_write(MI_INFO *file,int id,int lock_type)
|
|||
mi_extra(file,HA_EXTRA_WRITE_CACHE,0);
|
||||
}
|
||||
|
||||
sprintf((char*) record.id,"%7d",getpid());
|
||||
sprintf((char*) record.id,"%7ld",(long) getpid());
|
||||
strnmov((char*) record.text,"Testing...", sizeof(record.text));
|
||||
|
||||
tries=(uint) rnd(100)+10;
|
||||
|
|
|
@ -1294,7 +1294,7 @@ static int pbxt_init(void *p)
|
|||
#6 0x000debe1 in THD::THD at sql_class.cc:631
|
||||
#7 0x00e207a4 in myxt_create_thread at myxt_xt.cc:2666
|
||||
#8 0x00e3134b in tabc_fr_run_thread at tabcache_xt.cc:982
|
||||
#9 0x00e422ca in thr_main at thread_xt.cc:1006
|
||||
#9 0x00e422ca in thr_main_pbxt at thread_xt.cc:1006
|
||||
#10 0x91ff7c55 in _pthread_start
|
||||
#11 0x91ff7b12 in thread_start
|
||||
*
|
||||
|
@ -1557,7 +1557,7 @@ static int pbxt_prepare(handlerton *hton, THD *thd, bool all)
|
|||
return err;
|
||||
}
|
||||
|
||||
static XTThreadPtr ha_temp_open_global_database(handlerton *hton, THD **ret_thd, int *temp_thread, char *thread_name, int *err)
|
||||
static XTThreadPtr ha_temp_open_global_database(handlerton *hton, THD **ret_thd, int *temp_thread, const char *thread_name, int *err)
|
||||
{
|
||||
THD *thd;
|
||||
XTThreadPtr self = NULL;
|
||||
|
|
|
@ -3314,7 +3314,7 @@ static void *xn_xres_run_recovery_thread(XTThreadPtr self)
|
|||
* #7 0x000c0db2 in THD::~THD at sql_class.cc:934
|
||||
* #8 0x003b025b in myxt_destroy_thread at myxt_xt.cc:2999
|
||||
* #9 0x003b66b5 in xn_xres_run_recovery_thread at restart_xt.cc:3196
|
||||
* #10 0x003cbfbb in thr_main at thread_xt.cc:1020
|
||||
* #10 0x003cbfbb in thr_main_pbxt at thread_xt.cc:1020
|
||||
*
|
||||
myxt_destroy_thread(mysql_thread, TRUE);
|
||||
*/
|
||||
|
|
|
@ -1013,7 +1013,7 @@ static xtBool thr_setup_signals(void)
|
|||
|
||||
typedef void *(*ThreadMainFunc)(XTThreadPtr self);
|
||||
|
||||
extern "C" void *thr_main(void *data)
|
||||
extern "C" void *thr_main_pbxt(void *data)
|
||||
{
|
||||
ThreadDataPtr td = (ThreadDataPtr) data;
|
||||
XTThreadPtr self = td->td_thr;
|
||||
|
@ -1503,10 +1503,10 @@ xtPublic pthread_t xt_run_thread(XTThreadPtr self, XTThreadPtr child, void *(*st
|
|||
pthread_attr_t attr = { 0, 0, 0 };
|
||||
|
||||
attr.priority = THREAD_PRIORITY_NORMAL;
|
||||
err = pthread_create(&child_thread, &attr, thr_main, &data);
|
||||
err = pthread_create(&child_thread, &attr, thr_main_pbxt, &data);
|
||||
}
|
||||
#else
|
||||
err = pthread_create(&child_thread, NULL, thr_main, &data);
|
||||
err = pthread_create(&child_thread, NULL, thr_main_pbxt, &data);
|
||||
#endif
|
||||
if (err) {
|
||||
xt_free_thread(child);
|
||||
|
|
|
@ -536,7 +536,7 @@ extern struct XTThread **xt_thr_array;
|
|||
* Function prototypes
|
||||
*/
|
||||
|
||||
extern "C" void *thr_main(void *data);
|
||||
extern "C" void *thr_main_pbxt(void *data);
|
||||
|
||||
void xt_get_now(char *buffer, size_t len);
|
||||
xtBool xt_init_logging(void);
|
||||
|
|
|
@ -81,6 +81,7 @@ Created 10/8/1995 Heikki Tuuri
|
|||
#include "ut0mem.h"
|
||||
#include "ut0ut.h"
|
||||
#include "os0proc.h"
|
||||
#include "os0sync.h"
|
||||
#include "mem0mem.h"
|
||||
#include "mem0pool.h"
|
||||
#include "sync0sync.h"
|
||||
|
@ -1102,12 +1103,12 @@ srv_conc_enter_innodb_timer_based(trx_t* trx)
|
|||
}
|
||||
retry:
|
||||
if (srv_conc_n_threads < (lint) srv_thread_concurrency) {
|
||||
conc_n_threads = __sync_add_and_fetch(&srv_conc_n_threads, 1);
|
||||
conc_n_threads = os_atomic_increment_lint(&srv_conc_n_threads, 1);
|
||||
if (conc_n_threads <= (lint) srv_thread_concurrency) {
|
||||
enter_innodb_with_tickets(trx);
|
||||
return;
|
||||
}
|
||||
__sync_add_and_fetch(&srv_conc_n_threads, -1);
|
||||
os_atomic_increment_lint(&srv_conc_n_threads, -1);
|
||||
}
|
||||
if (!has_yielded)
|
||||
{
|
||||
|
@ -1118,7 +1119,7 @@ retry:
|
|||
if (trx->has_search_latch
|
||||
|| NULL != UT_LIST_GET_FIRST(trx->trx_locks)) {
|
||||
|
||||
conc_n_threads = __sync_add_and_fetch(&srv_conc_n_threads, 1);
|
||||
conc_n_threads = os_atomic_increment_lint(&srv_conc_n_threads, 1);
|
||||
enter_innodb_with_tickets(trx);
|
||||
return;
|
||||
}
|
||||
|
@ -1129,7 +1130,7 @@ retry:
|
|||
trx->op_info = "";
|
||||
has_slept++;
|
||||
}
|
||||
conc_n_threads = __sync_add_and_fetch(&srv_conc_n_threads, 1);
|
||||
conc_n_threads = os_atomic_increment_lint(&srv_conc_n_threads, 1);
|
||||
enter_innodb_with_tickets(trx);
|
||||
return;
|
||||
}
|
||||
|
@ -1137,7 +1138,7 @@ retry:
|
|||
static void
|
||||
srv_conc_exit_innodb_timer_based(trx_t* trx)
|
||||
{
|
||||
__sync_add_and_fetch(&srv_conc_n_threads, -1);
|
||||
os_atomic_increment_lint(&srv_conc_n_threads, -1);
|
||||
trx->declared_to_be_inside_innodb = FALSE;
|
||||
trx->n_tickets_to_enter_innodb = 0;
|
||||
return;
|
||||
|
@ -1326,7 +1327,7 @@ srv_conc_force_enter_innodb(
|
|||
ut_ad(srv_conc_n_threads >= 0);
|
||||
#ifdef INNODB_RW_LOCKS_USE_ATOMICS
|
||||
if (srv_thread_concurrency_timer_based) {
|
||||
__sync_add_and_fetch(&srv_conc_n_threads, 1);
|
||||
os_atomic_increment_lint(&srv_conc_n_threads, 1);
|
||||
trx->declared_to_be_inside_innodb = TRUE;
|
||||
trx->n_tickets_to_enter_innodb = 1;
|
||||
return;
|
||||
|
|
|
@ -88,6 +88,9 @@ storage/maria/ma_pagecache.c: .*'info_check_pin' defined but not used
|
|||
#
|
||||
storage/pbxt/ : typedef.*was ignored in this declaration
|
||||
|
||||
#
|
||||
# Yassl
|
||||
include/runtime.hpp: .*pure_error.*
|
||||
|
||||
#
|
||||
# Groff warnings on OpenSUSE.
|
||||
|
|
Loading…
Add table
Reference in a new issue