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
176147cd
Commit
176147cd
authored
Mar 24, 2001
by
monty@donna.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
Merge work:/home/bk/mysql into donna.mysql.fi:/home/my/bk/mysql
parents
faa63c50
aa115733
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
129 additions
and
126 deletions
+129
-126
Docs/manual.texi
Docs/manual.texi
+7
-0
include/my_pthread.h
include/my_pthread.h
+16
-1
mysql-test/t/join_crash.test
mysql-test/t/join_crash.test
+51
-91
mysys/my_bitmap.c
mysys/my_bitmap.c
+1
-1
mysys/my_open.c
mysys/my_open.c
+1
-1
mysys/my_pthread.c
mysys/my_pthread.c
+1
-1
mysys/my_thr_init.c
mysys/my_thr_init.c
+36
-14
mysys/my_winthread.c
mysys/my_winthread.c
+1
-1
mysys/thr_mutex.c
mysys/thr_mutex.c
+1
-12
sql/ha_innobase.cc
sql/ha_innobase.cc
+10
-2
sql/sql_select.cc
sql/sql_select.cc
+4
-2
No files found.
Docs/manual.texi
View file @
176147cd
...
@@ -42395,6 +42395,13 @@ not yet 100 % confident in this code.
...
@@ -42395,6 +42395,13 @@ not yet 100 % confident in this code.
@node News-3.23.36, News-3.23.35, News-3.23.x, News-3.23.x
@node News-3.23.36, News-3.23.35, News-3.23.x, News-3.23.x
@appendixsubsec Changes in release 3.23.36
@appendixsubsec Changes in release 3.23.36
@itemize @bullet
@itemize @bullet
@item
Fixed that one can't use database names with @code{.}. This fixes a serious
security issue when @code{mysqld} is run as root.
@item
Fixed a core-dump bug when using very complex query involving
@code{DISTINCT} and summary functions.
@item
Added @code{SET TRANSACTION ISOLATION LEVEL ...}
Added @code{SET TRANSACTION ISOLATION LEVEL ...}
@item
@item
Added @code{SELECT ... FOR UPDATE}.
Added @code{SELECT ... FOR UPDATE}.
include/my_pthread.h
View file @
176147cd
...
@@ -499,11 +499,26 @@ extern int my_rw_unlock( my_rw_lock_t * );
...
@@ -499,11 +499,26 @@ extern int my_rw_unlock( my_rw_lock_t * );
#define pthread_attr_setstacksize(A,B) pthread_dummy(0)
#define pthread_attr_setstacksize(A,B) pthread_dummy(0)
#endif
#endif
/* Define mutex types */
#define MY_MUTEX_INIT_SLOW NULL
#define MY_MUTEX_INIT_FAST NULL
#define MY_MUTEX_INIT_ERRCHK NULL
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
extern
pthread_mutexattr_t
my_fast_mutexattr
;
#undef MY_MUTEX_INIT_FAST
#define MY_MUTEX_INIT_FAST &my_fast_mutexattr
#endif
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
extern
pthread_mutexattr_t
my_errchk_mutexattr
;
#undef MY_INIT_MUTEX_ERRCHK
#define MY_INIT_MUTEX_ERRCHK &my_errchk_mutexattr
#endif
extern
my_bool
my_thread_global_init
(
void
);
extern
my_bool
my_thread_global_init
(
void
);
extern
void
my_thread_global_end
(
void
);
extern
void
my_thread_global_end
(
void
);
extern
my_bool
my_thread_init
(
void
);
extern
my_bool
my_thread_init
(
void
);
extern
void
my_thread_end
(
void
);
extern
void
my_thread_end
(
void
);
extern
char
*
my_thread_name
(
void
);
extern
c
onst
c
har
*
my_thread_name
(
void
);
extern
long
my_thread_id
(
void
);
extern
long
my_thread_id
(
void
);
extern
int
pthread_no_free
(
void
*
);
extern
int
pthread_no_free
(
void
*
);
extern
int
pthread_dummy
(
int
);
extern
int
pthread_dummy
(
int
);
...
...
mysql-test/t/join_crash.test
View file @
176147cd
# MySQL dump 8.13
#
#
# Host: localhost Database: timeprep
# This test gave a core dump
#--------------------------------------------------------
# Server version 3.23.35-log
#
# Table structure for table 'project'
#
#
DROP
TABLE
IF
EXISTS
project
;
DROP
TABLE
IF
EXISTS
t1
,
t2
,
t3
,
t4
;
CREATE
TABLE
project
(
CREATE
TABLE
t1
(
project_id
int
(
11
)
NOT
NULL
auto_increment
,
project_id
int
(
11
)
NOT
NULL
auto_increment
,
project_row_lock
int
(
11
)
NOT
NULL
default
'0'
,
project_row_lock
int
(
11
)
NOT
NULL
default
'0'
,
project_name
varchar
(
80
)
NOT
NULL
default
''
,
project_name
varchar
(
80
)
NOT
NULL
default
''
,
...
@@ -22,27 +16,18 @@ CREATE TABLE project (
...
@@ -22,27 +16,18 @@ CREATE TABLE project (
UNIQUE
KEY
project
(
client_ptr
,
project_name
)
UNIQUE
KEY
project
(
client_ptr
,
project_name
)
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
#
INSERT
INTO
t1
VALUES
(
1
,
0
,
'Rejected Time'
,
1
,
NULL
,
NULL
,
NULL
,
NULL
);
# Dumping data for table 'project'
INSERT
INTO
t1
VALUES
(
209
,
0
,
'MDGRAD Proposal/Investigation'
,
97
,
NULL
,
NULL
,
NULL
,
''
);
#
INSERT
INTO
t1
VALUES
(
208
,
0
,
'Font 9 Design'
,
84
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
t1
VALUES
(
207
,
0
,
'Web Based Order Processing'
,
95
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
1
,
0
,
'Rejected Time'
,
1
,
NULL
,
NULL
,
NULL
,
NULL
);
INSERT
INTO
t1
VALUES
(
205
,
0
,
'Mac Screen Saver'
,
95
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
209
,
0
,
'MDGRAD Proposal/Investigation'
,
97
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
t1
VALUES
(
206
,
0
,
'Web Site'
,
96
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
208
,
0
,
'Font 9 Design'
,
84
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
t1
VALUES
(
204
,
0
,
'Magnafire Glue'
,
94
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
207
,
0
,
'Web Based Order Processing'
,
95
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
t1
VALUES
(
203
,
0
,
'Print Bid'
,
93
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
205
,
0
,
'Mac Screen Saver'
,
95
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
t1
VALUES
(
202
,
0
,
'EPOC Port'
,
92
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
206
,
0
,
'Web Site'
,
96
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
t1
VALUES
(
201
,
0
,
'TravelMate'
,
88
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
204
,
0
,
'Magnafire Glue'
,
94
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
203
,
0
,
'Print Bid'
,
93
,
NULL
,
NULL
,
NULL
,
''
);
CREATE
TABLE
t2
(
INSERT
INTO
project
VALUES
(
202
,
0
,
'EPOC Port'
,
92
,
NULL
,
NULL
,
NULL
,
''
);
INSERT
INTO
project
VALUES
(
201
,
0
,
'TravelMate'
,
88
,
NULL
,
NULL
,
NULL
,
''
);
#
# Table structure for table 'period'
#
DROP
TABLE
IF
EXISTS
period
;
CREATE
TABLE
period
(
period_id
int
(
11
)
NOT
NULL
auto_increment
,
period_id
int
(
11
)
NOT
NULL
auto_increment
,
period_type
enum
(
'user_table'
,
'client_table'
,
'role_table'
,
'member_table'
,
'project_table'
)
default
NULL
,
period_type
enum
(
'user_table'
,
'client_table'
,
'role_table'
,
'member_table'
,
'project_table'
)
default
NULL
,
period_key
int
(
11
)
default
NULL
,
period_key
int
(
11
)
default
NULL
,
...
@@ -54,32 +39,23 @@ CREATE TABLE period (
...
@@ -54,32 +39,23 @@ CREATE TABLE period (
KEY
date_index
(
start_date
,
end_date
)
KEY
date_index
(
start_date
,
end_date
)
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
#
INSERT
INTO
t2
VALUES
(
1
,
'user_table'
,
98
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
# Dumping data for table 'period'
INSERT
INTO
t2
VALUES
(
2
,
'user_table'
,
99
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
#
INSERT
INTO
t2
VALUES
(
3
,
'user_table'
,
100
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
49
,
'project_table'
,
148
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
1
,
'user_table'
,
98
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
50
,
'client_table'
,
68
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
2
,
'user_table'
,
99
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
51
,
'project_table'
,
149
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
3
,
'user_table'
,
100
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
52
,
'project_table'
,
150
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
49
,
'project_table'
,
148
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
53
,
'client_table'
,
69
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
50
,
'client_table'
,
68
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
54
,
'project_table'
,
151
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
51
,
'project_table'
,
149
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
55
,
'client_table'
,
70
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
52
,
'project_table'
,
150
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
155
,
'role_table'
,
1
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
53
,
'client_table'
,
69
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
156
,
'role_table'
,
2
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
54
,
'project_table'
,
151
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
160
,
'member_table'
,
1
,
'2000-01-01 00:00:00'
,
NULL
,
1
);
INSERT
INTO
period
VALUES
(
55
,
'client_table'
,
70
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
161
,
'member_table'
,
2
,
'2000-01-01 00:00:00'
,
NULL
,
1
);
INSERT
INTO
period
VALUES
(
155
,
'role_table'
,
1
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
t2
VALUES
(
162
,
'member_table'
,
3
,
'2000-01-01 00:00:00'
,
NULL
,
1
);
INSERT
INTO
period
VALUES
(
156
,
'role_table'
,
2
,
'2000-01-01 00:00:00'
,
NULL
,
NULL
);
INSERT
INTO
period
VALUES
(
160
,
'member_table'
,
1
,
'2000-01-01 00:00:00'
,
NULL
,
1
);
CREATE
TABLE
t3
(
INSERT
INTO
period
VALUES
(
161
,
'member_table'
,
2
,
'2000-01-01 00:00:00'
,
NULL
,
1
);
INSERT
INTO
period
VALUES
(
162
,
'member_table'
,
3
,
'2000-01-01 00:00:00'
,
NULL
,
1
);
#
# Table structure for table 'budget'
#
DROP
TABLE
IF
EXISTS
budget
;
CREATE
TABLE
budget
(
budget_id
int
(
11
)
NOT
NULL
auto_increment
,
budget_id
int
(
11
)
NOT
NULL
auto_increment
,
project_ptr
int
(
11
)
NOT
NULL
default
'0'
,
project_ptr
int
(
11
)
NOT
NULL
default
'0'
,
po_number
varchar
(
20
)
NOT
NULL
default
''
,
po_number
varchar
(
20
)
NOT
NULL
default
''
,
...
@@ -91,17 +67,7 @@ CREATE TABLE budget (
...
@@ -91,17 +67,7 @@ CREATE TABLE budget (
UNIQUE
KEY
po
(
project_ptr
,
po_number
)
UNIQUE
KEY
po
(
project_ptr
,
po_number
)
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
#
CREATE
TABLE
t4
(
# Dumping data for table 'budget'
#
#
# Table structure for table 'client'
#
DROP
TABLE
IF
EXISTS
client
;
CREATE
TABLE
client
(
client_id
int
(
11
)
NOT
NULL
auto_increment
,
client_id
int
(
11
)
NOT
NULL
auto_increment
,
client_row_lock
int
(
11
)
NOT
NULL
default
'0'
,
client_row_lock
int
(
11
)
NOT
NULL
default
'0'
,
client_name
varchar
(
80
)
NOT
NULL
default
''
,
client_name
varchar
(
80
)
NOT
NULL
default
''
,
...
@@ -111,45 +77,39 @@ CREATE TABLE client (
...
@@ -111,45 +77,39 @@ CREATE TABLE client (
UNIQUE
KEY
client_name
(
client_name
)
UNIQUE
KEY
client_name
(
client_name
)
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
#
INSERT
INTO
t4
VALUES
(
1
,
0
,
'CPS'
,
NULL
,
NULL
);
# Dumping data for table 'client'
#
INSERT
INTO
client
VALUES
(
1
,
0
,
'CPS'
,
NULL
,
NULL
);
#
#
# The query that fails...
# The query that fails...
#
#
select
distinct
select
distinct
project
.
project_id
as
project_id
,
t1
.
project_id
as
project_id
,
project
.
project_name
as
project_name
,
t1
.
project_name
as
project_name
,
project
.
client_ptr
as
client_ptr
,
t1
.
client_ptr
as
client_ptr
,
project
.
comments
as
comments
,
t1
.
comments
as
comments
,
sum
(
budget
.
amount_received
)
+
sum
(
budget
.
adjustment
)
as
total_budget
sum
(
t3
.
amount_received
)
+
sum
(
t3
.
adjustment
)
as
total_budget
from
from
project
,
t1
,
period
as
client_period
,
t2
as
client_period
,
period
as
project_period
t2
as
project_period
left
join
left
join
budget
t3
on
on
budget
.
project_ptr
=
project
.
project_id
t3
.
project_ptr
=
t1
.
project_id
and
budget
.
date_received
<=
'2001-03-22 14:15:09'
and
t3
.
date_received
<=
'2001-03-22 14:15:09'
left
join
left
join
client
t4
on
on
client
.
client_id
=
project
.
client_ptr
t4
.
client_id
=
t1
.
client_ptr
where
where
1
1
and
(
client_period
.
period_type
=
'client_table'
and
(
client_period
.
period_type
=
'client_table'
and
client_period
.
period_key
=
client
.
client_id
and
client_period
.
period_key
=
t4
.
client_id
and
(
client_period
.
start_date
<=
'2001-03-22 14:15:09'
or
isnull
(
client_period
.
start_date
))
and
(
client_period
.
start_date
<=
'2001-03-22 14:15:09'
or
isnull
(
client_period
.
start_date
))
and
(
client_period
.
end_date
>
'2001-03-21 14:15:09'
or
isnull
(
client_period
.
end_date
))
and
(
client_period
.
end_date
>
'2001-03-21 14:15:09'
or
isnull
(
client_period
.
end_date
))
)
)
and
(
project_period
.
period_type
=
'project_table'
and
(
project_period
.
period_type
=
'project_table'
and
project_period
.
period_key
=
project
.
project_id
and
project_period
.
period_key
=
t1
.
project_id
and
(
project_period
.
start_date
<=
'2001-03-22 14:15:09'
or
isnull
(
project_period
.
start_date
))
and
(
project_period
.
start_date
<=
'2001-03-22 14:15:09'
or
isnull
(
project_period
.
start_date
))
and
(
project_period
.
end_date
>
'2001-03-21 14:15:09'
or
isnull
(
project_period
.
end_date
))
)
and
(
project_period
.
end_date
>
'2001-03-21 14:15:09'
or
isnull
(
project_period
.
end_date
))
)
group
by
group
by
...
@@ -159,5 +119,5 @@ from
...
@@ -159,5 +119,5 @@ from
project_period
.
period_id
project_period
.
period_id
order
by
order
by
client_name
asc
,
client_name
asc
,
project_name
asc
project_name
asc
;
;
DROP
TABLE
t1
,
t2
,
t3
,
t4
;
mysys/my_bitmap.c
View file @
176147cd
...
@@ -34,7 +34,7 @@ my_bool bitmap_init(MY_BITMAP *map, uint bitmap_size)
...
@@ -34,7 +34,7 @@ my_bool bitmap_init(MY_BITMAP *map, uint bitmap_size)
return
1
;
return
1
;
dbug_assert
(
bitmap_size
!=
~
(
uint
)
0
);
dbug_assert
(
bitmap_size
!=
~
(
uint
)
0
);
#ifdef THREAD
#ifdef THREAD
pthread_mutex_init
(
&
map
->
mutex
,
NULL
);
pthread_mutex_init
(
&
map
->
mutex
,
MY_MUTEX_INIT_FAST
);
#endif
#endif
map
->
bitmap_size
=
bitmap_size
;
map
->
bitmap_size
=
bitmap_size
;
return
0
;
return
0
;
...
...
mysys/my_open.c
View file @
176147cd
...
@@ -107,7 +107,7 @@ File my_register_filename(File fd, const char *FileName, enum file_type
...
@@ -107,7 +107,7 @@ File my_register_filename(File fd, const char *FileName, enum file_type
my_file_opened
++
;
my_file_opened
++
;
my_file_info
[
fd
].
type
=
type_of_file
;
my_file_info
[
fd
].
type
=
type_of_file
;
#if defined(THREAD) && !defined(HAVE_PREAD)
#if defined(THREAD) && !defined(HAVE_PREAD)
pthread_mutex_init
(
&
my_file_info
[
fd
].
mutex
,
NULL
);
pthread_mutex_init
(
&
my_file_info
[
fd
].
mutex
,
MY_MUTEX_INIT_FAST
);
#endif
#endif
pthread_mutex_unlock
(
&
THR_LOCK_open
);
pthread_mutex_unlock
(
&
THR_LOCK_open
);
DBUG_PRINT
(
"exit"
,(
"fd: %d"
,
fd
));
DBUG_PRINT
(
"exit"
,(
"fd: %d"
,
fd
));
...
...
mysys/my_pthread.c
View file @
176147cd
...
@@ -316,7 +316,7 @@ int sigwait(sigset_t *setp, int *sigp)
...
@@ -316,7 +316,7 @@ int sigwait(sigset_t *setp, int *sigp)
pthread_t
sigwait_thread_id
;
pthread_t
sigwait_thread_id
;
inited
=
1
;
inited
=
1
;
sigemptyset
(
&
pending_set
);
sigemptyset
(
&
pending_set
);
pthread_mutex_init
(
&
LOCK_sigwait
,
NULL
);
pthread_mutex_init
(
&
LOCK_sigwait
,
MY_MUTEX_INIT_FAST
);
pthread_cond_init
(
&
COND_sigwait
,
NULL
);
pthread_cond_init
(
&
COND_sigwait
,
NULL
);
pthread_attr_init
(
&
thr_attr
);
pthread_attr_init
(
&
thr_attr
);
...
...
mysys/my_thr_init.c
View file @
176147cd
...
@@ -28,13 +28,19 @@
...
@@ -28,13 +28,19 @@
pthread_key
(
struct
st_my_thread_var
*
,
THR_KEY_mysys
);
pthread_key
(
struct
st_my_thread_var
*
,
THR_KEY_mysys
);
#else
#else
pthread_key
(
struct
st_my_thread_var
,
THR_KEY_mysys
);
pthread_key
(
struct
st_my_thread_var
,
THR_KEY_mysys
);
#endif
#endif
/* USE_TLS */
pthread_mutex_t
THR_LOCK_malloc
,
THR_LOCK_open
,
THR_LOCK_keycache
,
pthread_mutex_t
THR_LOCK_malloc
,
THR_LOCK_open
,
THR_LOCK_keycache
,
THR_LOCK_lock
,
THR_LOCK_isam
,
THR_LOCK_myisam
,
THR_LOCK_heap
,
THR_LOCK_lock
,
THR_LOCK_isam
,
THR_LOCK_myisam
,
THR_LOCK_heap
,
THR_LOCK_net
,
THR_LOCK_charset
;
THR_LOCK_net
,
THR_LOCK_charset
;
#ifndef HAVE_LOCALTIME_R
#ifndef HAVE_LOCALTIME_R
pthread_mutex_t
LOCK_localtime_r
;
pthread_mutex_t
LOCK_localtime_r
;
#endif
#endif
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t
my_fast_mutexattr
;
#endif
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
pthread_mutexattr_t
my_errchk_mutexattr
;
#endif
/* FIXME Note. TlsAlloc does not set an auto destructor, so
/* FIXME Note. TlsAlloc does not set an auto destructor, so
the function my_thread_global_free must be called from
the function my_thread_global_free must be called from
...
@@ -47,20 +53,30 @@ my_bool my_thread_global_init(void)
...
@@ -47,20 +53,30 @@ my_bool my_thread_global_init(void)
fprintf
(
stderr
,
"Can't initialize threads: error %d
\n
"
,
errno
);
fprintf
(
stderr
,
"Can't initialize threads: error %d
\n
"
,
errno
);
exit
(
1
);
exit
(
1
);
}
}
pthread_mutex_init
(
&
THR_LOCK_malloc
,
NULL
);
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutex_init
(
&
THR_LOCK_open
,
NULL
);
pthread_mutexattr_init
(
&
my_fast_mutexattr
);
pthread_mutex_init
(
&
THR_LOCK_keycache
,
NULL
);
pthread_mutexattr_setkind_np
(
&
my_fast_mutexattr
,
PTHREAD_MUTEX_ADAPTIVE_NP
);
pthread_mutex_init
(
&
THR_LOCK_lock
,
NULL
);
#endif
pthread_mutex_init
(
&
THR_LOCK_isam
,
NULL
);
#ifdef PPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
pthread_mutex_init
(
&
THR_LOCK_myisam
,
NULL
);
pthread_mutexattr_init
(
&
my_errchk_mutexattr
);
pthread_mutex_init
(
&
THR_LOCK_heap
,
NULL
);
pthread_mutexattr_setkind_np
(
&
my_errchk_mutexattr
,
pthread_mutex_init
(
&
THR_LOCK_net
,
NULL
);
PTHREAD_MUTEX_ERRORCHECK_NP
);
pthread_mutex_init
(
&
THR_LOCK_charset
,
NULL
);
#endif
pthread_mutex_init
(
&
THR_LOCK_malloc
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
THR_LOCK_open
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
THR_LOCK_keycache
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
THR_LOCK_lock
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
THR_LOCK_isam
,
MY_MUTEX_INIT_SLOW
);
pthread_mutex_init
(
&
THR_LOCK_myisam
,
MY_MUTEX_INIT_SLOW
);
pthread_mutex_init
(
&
THR_LOCK_heap
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
THR_LOCK_net
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
THR_LOCK_charset
,
MY_MUTEX_INIT_FAST
);
#ifdef __WIN__
#ifdef __WIN__
win_pthread_init
();
win_pthread_init
();
#endif
#endif
#ifndef HAVE_LOCALTIME_R
#ifndef HAVE_LOCALTIME_R
pthread_mutex_init
(
&
LOCK_localtime_r
,
NULL
);
pthread_mutex_init
(
&
LOCK_localtime_r
,
MY_MUTEX_INIT_SLOW
);
#endif
#endif
return
my_thread_init
();
return
my_thread_init
();
}
}
...
@@ -70,6 +86,12 @@ void my_thread_global_end(void)
...
@@ -70,6 +86,12 @@ void my_thread_global_end(void)
#if defined(USE_TLS)
#if defined(USE_TLS)
(
void
)
TlsFree
(
THR_KEY_mysys
);
(
void
)
TlsFree
(
THR_KEY_mysys
);
#endif
#endif
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_destroy
(
&
my_fast_mutexattr
);
#endif
#ifdef PPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
pthread_mutexattr_destroy
(
&
my_errchk_mutexattr
);
#endif
}
}
static
long
thread_id
=
0
;
static
long
thread_id
=
0
;
...
@@ -114,7 +136,7 @@ my_bool my_thread_init(void)
...
@@ -114,7 +136,7 @@ my_bool my_thread_init(void)
tmp
=
&
THR_KEY_mysys
;
tmp
=
&
THR_KEY_mysys
;
#endif
#endif
tmp
->
id
=
++
thread_id
;
tmp
->
id
=
++
thread_id
;
pthread_mutex_init
(
&
tmp
->
mutex
,
NULL
);
pthread_mutex_init
(
&
tmp
->
mutex
,
MY_MUTEX_INIT_FAST
);
pthread_cond_init
(
&
tmp
->
suspend
,
NULL
);
pthread_cond_init
(
&
tmp
->
suspend
,
NULL
);
#if !defined(__WIN__) || defined(USE_TLS) || ! defined(SAFE_MUTEX)
#if !defined(__WIN__) || defined(USE_TLS) || ! defined(SAFE_MUTEX)
pthread_mutex_unlock
(
&
THR_LOCK_lock
);
pthread_mutex_unlock
(
&
THR_LOCK_lock
);
...
@@ -180,14 +202,14 @@ long my_thread_id()
...
@@ -180,14 +202,14 @@ long my_thread_id()
}
}
#ifdef DBUG_OFF
#ifdef DBUG_OFF
char
*
my_thread_name
(
void
)
c
onst
c
har
*
my_thread_name
(
void
)
{
{
return
"no_name"
;
return
"no_name"
;
}
}
#else
#else
char
*
my_thread_name
(
void
)
c
onst
c
har
*
my_thread_name
(
void
)
{
{
char
name_buff
[
100
];
char
name_buff
[
100
];
struct
st_my_thread_var
*
tmp
=
my_thread_var
;
struct
st_my_thread_var
*
tmp
=
my_thread_var
;
...
...
mysys/my_winthread.c
View file @
176147cd
...
@@ -39,7 +39,7 @@ struct pthread_map
...
@@ -39,7 +39,7 @@ struct pthread_map
void
win_pthread_init
(
void
)
void
win_pthread_init
(
void
)
{
{
pthread_mutex_init
(
&
THR_LOCK_thread
,
NULL
);
pthread_mutex_init
(
&
THR_LOCK_thread
,
MY_MUTEX_INIT_FAST
);
}
}
/*
/*
...
...
mysys/thr_mutex.c
View file @
176147cd
...
@@ -43,19 +43,8 @@ int safe_mutex_init(safe_mutex_t *mp,
...
@@ -43,19 +43,8 @@ int safe_mutex_init(safe_mutex_t *mp,
const
pthread_mutexattr_t
*
attr
__attribute__
((
unused
)))
const
pthread_mutexattr_t
*
attr
__attribute__
((
unused
)))
{
{
bzero
((
char
*
)
mp
,
sizeof
(
*
mp
));
bzero
((
char
*
)
mp
,
sizeof
(
*
mp
));
#ifdef HAVE_LINUXTHREADS
/* Some extra safety */
pthread_mutex_init
(
&
mp
->
global
,
MY_MUTEX_INIT_ERRCHK
);
{
pthread_mutexattr_t
tmp
;
pthread_mutexattr_init
(
&
tmp
);
pthread_mutexattr_setkind_np
(
&
tmp
,
PTHREAD_MUTEX_ERRORCHECK_NP
);
pthread_mutex_init
(
&
mp
->
global
,
&
tmp
);
pthread_mutex_init
(
&
mp
->
mutex
,
&
tmp
);
pthread_mutexattr_destroy
(
&
tmp
);
}
#else
pthread_mutex_init
(
&
mp
->
global
,
NULL
);
pthread_mutex_init
(
&
mp
->
mutex
,
attr
);
pthread_mutex_init
(
&
mp
->
mutex
,
attr
);
#endif
return
0
;
return
0
;
}
}
...
...
sql/ha_innobase.cc
View file @
176147cd
...
@@ -917,6 +917,7 @@ innobase_mysql_cmp(
...
@@ -917,6 +917,7 @@ innobase_mysql_cmp(
not UNIV_SQL_NULL */
not UNIV_SQL_NULL */
{
{
enum_field_types
mysql_tp
;
enum_field_types
mysql_tp
;
int
ret
;
dbug_assert
(
a_length
!=
UNIV_SQL_NULL
);
dbug_assert
(
a_length
!=
UNIV_SQL_NULL
);
dbug_assert
(
b_length
!=
UNIV_SQL_NULL
);
dbug_assert
(
b_length
!=
UNIV_SQL_NULL
);
...
@@ -927,8 +928,15 @@ innobase_mysql_cmp(
...
@@ -927,8 +928,15 @@ innobase_mysql_cmp(
case
FIELD_TYPE_STRING
:
case
FIELD_TYPE_STRING
:
case
FIELD_TYPE_VAR_STRING
:
case
FIELD_TYPE_VAR_STRING
:
return
(
my_sortncmp
((
const
char
*
)
a
,
a_length
,
ret
=
my_sortncmp
((
const
char
*
)
a
,
a_length
,
(
const
char
*
)
b
,
b_length
));
(
const
char
*
)
b
,
b_length
);
if
(
ret
<
0
)
{
return
(
-
1
);
}
else
if
(
ret
>
0
)
{
return
(
1
);
}
else
{
return
(
0
);
}
default:
default:
assert
(
0
);
assert
(
0
);
}
}
...
...
sql/sql_select.cc
View file @
176147cd
...
@@ -712,7 +712,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
...
@@ -712,7 +712,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
}
}
if
(
tmp_table
->
distinct
)
if
(
tmp_table
->
distinct
)
select_distinct
=
0
;
/* Each row is uniq */
select_distinct
=
0
;
/* Each row is uniq
ue
*/
join_free
(
&
join
);
/* Free quick selects */
join_free
(
&
join
);
/* Free quick selects */
if
(
select_distinct
&&
!
group
)
if
(
select_distinct
&&
!
group
)
...
@@ -3635,7 +3635,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
...
@@ -3635,7 +3635,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
in the first 'hidden_null_pack_length' bytes of the row.
in the first 'hidden_null_pack_length' bytes of the row.
*/
*/
null_pack_length
-=
hidden_null_pack_length
;
null_pack_length
-=
hidden_null_pack_length
;
keyinfo
->
key_parts
=
field_count
+
test
(
null_pack_length
);
keyinfo
->
key_parts
=
((
field_count
-
hidden_field_count
)
+
test
(
null_pack_length
));
if
(
allow_distinct_limit
)
if
(
allow_distinct_limit
)
{
{
set_if_smaller
(
table
->
max_rows
,
thd
->
select_limit
);
set_if_smaller
(
table
->
max_rows
,
thd
->
select_limit
);
...
@@ -3673,6 +3674,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
...
@@ -3673,6 +3674,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
key_part_info
->
type
=
HA_KEYTYPE_BINARY
;
key_part_info
->
type
=
HA_KEYTYPE_BINARY
;
key_part_info
++
;
key_part_info
++
;
}
}
/* Create a distinct key over the columns we are going to return */
for
(
i
=
param
->
hidden_field_count
,
reg_field
=
table
->
field
+
i
;
for
(
i
=
param
->
hidden_field_count
,
reg_field
=
table
->
field
+
i
;
i
<
field_count
;
i
<
field_count
;
i
++
,
reg_field
++
,
key_part_info
++
)
i
++
,
reg_field
++
,
key_part_info
++
)
...
...
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