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
df280335
Commit
df280335
authored
Sep 21, 2000
by
monty@donna.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for SAFE_MUTEX + MERGE tables
parent
80d200e1
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
62 additions
and
29 deletions
+62
-29
Docs/manual.texi
Docs/manual.texi
+3
-0
include/my_pthread.h
include/my_pthread.h
+1
-0
include/myisammrg.h
include/myisammrg.h
+1
-1
myisam/ft_stopwords.c
myisam/ft_stopwords.c
+1
-0
myisammrg/myrg_open.c
myisammrg/myrg_open.c
+10
-4
myisammrg/myrg_queue.c
myisammrg/myrg_queue.c
+17
-14
myisammrg/myrg_rfirst.c
myisammrg/myrg_rfirst.c
+1
-1
myisammrg/myrg_rkey.c
myisammrg/myrg_rkey.c
+1
-1
mysys/my_thr_init.c
mysys/my_thr_init.c
+2
-5
mysys/my_winthread.c
mysys/my_winthread.c
+9
-1
mysys/thr_mutex.c
mysys/thr_mutex.c
+14
-0
sql/ha_myisammrg.cc
sql/ha_myisammrg.cc
+1
-1
sql/mysqld.cc
sql/mysqld.cc
+1
-1
No files found.
Docs/manual.texi
View file @
df280335
...
...
@@ -40860,6 +40860,9 @@ Fixed @code{DISTINCT} with calculated columns.
@itemize @bullet
@item
@code{mysqldump} on a @code{MERGE} table doesn't include the current
mapped tables.
@item
For the moment @code{MATCH} only works with @code{SELECT} statements.
@item
You cannot build in another directory when using
include/my_pthread.h
View file @
df280335
...
...
@@ -60,6 +60,7 @@ typedef int pthread_mutexattr_t;
#define pthread_handler_decl(A,B) unsigned __cdecl A(void *B)
typedef
unsigned
(
__cdecl
*
pthread_handler
)(
void
*
);
void
win_pthread_init
(
void
);
int
win_pthread_setspecific
(
void
*
A
,
void
*
B
,
uint
length
);
int
pthread_create
(
pthread_t
*
,
pthread_attr_t
*
,
pthread_handler
,
void
*
);
int
pthread_cond_init
(
pthread_cond_t
*
cond
,
const
pthread_condattr_t
*
attr
);
...
...
include/myisammrg.h
View file @
df280335
...
...
@@ -59,7 +59,7 @@ typedef struct st_myrg_info
ulonglong
records
;
/* records in tables */
ulonglong
del
;
/* Removed records */
ulonglong
data_file_length
;
uint
tables
,
options
,
reclength
;
uint
tables
,
options
,
reclength
,
keys
;
my_bool
cache_in_use
;
LIST
open_list
;
QUEUE
by_key
;
...
...
myisam/ft_stopwords.c
View file @
df280335
...
...
@@ -72,6 +72,7 @@ void ft_free_stopwords()
if
(
stopwords3
)
{
delete_tree
(
stopwords3
);
/* purecov: inspected */
my_free
((
char
*
)
stopwords3
,
MYF
(
0
));
stopwords3
=
0
;
}
}
myisammrg/myrg_open.c
View file @
df280335
...
...
@@ -86,6 +86,7 @@ int handle_locking;
*
m_info
=
info
;
m_info
->
open_tables
=
(
MYRG_TABLE
*
)
(
m_info
+
1
);
m_info
->
tables
=
files
;
errpos
=
2
;
for
(
i
=
files
;
i
--
>
0
;
)
{
...
...
@@ -104,16 +105,21 @@ int handle_locking;
m_info
->
open_tables
[
i
].
file_offset
=
(
my_off_t
)
file_offset
;
file_offset
+=
m_info
->
open_tables
[
i
].
table
->
state
->
data_file_length
;
}
errpos
=
2
;
if
(
sizeof
(
my_off_t
)
==
4
&&
file_offset
>
(
ulonglong
)
(
ulong
)
~
0L
)
{
my_errno
=
HA_ERR_RECORD_FILE_FULL
;
goto
err
;
}
/* Allocate memory for queue */
if
(
m_info
->
open_tables
->
table
->
s
->
base
.
keys
&&
_myrg_init_queue
(
m_info
,
0
,
HA_READ_KEY_EXACT
))
goto
err
;
m_info
->
keys
=
0
;
if
(
files
)
{
if
((
m_info
->
keys
=
m_info
->
open_tables
->
table
->
s
->
base
.
keys
)
&&
_myrg_init_queue
(
m_info
,
0
,
HA_READ_KEY_EXACT
))
goto
err
;
}
else
bzero
((
char
*
)
&
m_info
->
by_key
,
sizeof
(
m_info
->
by_key
));
m_info
->
end_table
=
m_info
->
open_tables
+
files
;
m_info
->
last_used_table
=
m_info
->
open_tables
;
...
...
myisammrg/myrg_queue.c
View file @
df280335
...
...
@@ -34,21 +34,24 @@ int _myrg_init_queue(MYRG_INFO *info,int inx,enum ha_rkey_function search_flag)
int
error
=
0
;
QUEUE
*
q
=
&
(
info
->
by_key
);
if
(
!
is_queue_inited
(
q
)
)
if
(
inx
<
(
int
)
info
->
keys
)
{
if
(
init_queue
(
q
,
info
->
tables
,
0
,
(
myisam_readnext_vec
[
search_flag
]
==
SEARCH_SMALLER
),
queue_key_cmp
,
info
->
open_tables
->
table
->
s
->
keyinfo
[
inx
].
seg
))
error
=
my_errno
;
}
else
{
if
(
reinit_queue
(
q
,
info
->
tables
,
0
,
(
myisam_readnext_vec
[
search_flag
]
==
SEARCH_SMALLER
),
queue_key_cmp
,
info
->
open_tables
->
table
->
s
->
keyinfo
[
inx
].
seg
))
error
=
my_errno
;
if
(
!
is_queue_inited
(
q
))
{
if
(
init_queue
(
q
,
info
->
tables
,
0
,
(
myisam_readnext_vec
[
search_flag
]
==
SEARCH_SMALLER
),
queue_key_cmp
,
info
->
open_tables
->
table
->
s
->
keyinfo
[
inx
].
seg
))
error
=
my_errno
;
}
else
{
if
(
reinit_queue
(
q
,
info
->
tables
,
0
,
(
myisam_readnext_vec
[
search_flag
]
==
SEARCH_SMALLER
),
queue_key_cmp
,
info
->
open_tables
->
table
->
s
->
keyinfo
[
inx
].
seg
))
error
=
my_errno
;
}
}
return
error
;
}
myisammrg/myrg_rfirst.c
View file @
df280335
...
...
@@ -27,7 +27,7 @@ int myrg_rfirst(MYRG_INFO *info, byte *buf, int inx)
if
(
_myrg_init_queue
(
info
,
inx
,
HA_READ_KEY_OR_NEXT
))
return
my_errno
;
for
(
table
=
info
->
open_tables
;
table
<
info
->
end_table
;
table
++
)
for
(
table
=
info
->
open_tables
;
table
!=
info
->
end_table
;
table
++
)
{
if
((
err
=
mi_rfirst
(
table
->
table
,
NULL
,
inx
)))
{
...
...
myisammrg/myrg_rkey.c
View file @
df280335
...
...
@@ -49,7 +49,7 @@ int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
if
(
_myrg_init_queue
(
info
,
inx
,
search_flag
))
return
my_errno
;
for
(
table
=
info
->
open_tables
;
table
<
info
->
end_table
;
table
++
)
for
(
table
=
info
->
open_tables
;
table
!=
info
->
end_table
;
table
++
)
{
mi
=
table
->
table
;
...
...
mysys/my_thr_init.c
View file @
df280335
...
...
@@ -35,9 +35,6 @@ pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
#ifndef HAVE_LOCALTIME_R
pthread_mutex_t
LOCK_localtime_r
;
#endif
#ifdef __WIN__
pthread_mutex_t
THR_LOCK_thread
;
#endif
/* FIXME Note. TlsAlloc does not set an auto destructor, so
the function my_thread_global_free must be called from
...
...
@@ -60,7 +57,7 @@ my_bool my_thread_global_init(void)
pthread_mutex_init
(
&
THR_LOCK_net
,
NULL
);
pthread_mutex_init
(
&
THR_LOCK_charset
,
NULL
);
#ifdef __WIN__
pthread_mutex_init
(
&
THR_LOCK_thread
,
NULL
);
win_pthread_init
(
);
#endif
#ifndef HAVE_LOCALTIME_R
pthread_mutex_init
(
&
LOCK_localtime_r
,
NULL
);
...
...
@@ -78,7 +75,7 @@ void my_thread_global_end(void)
static
long
thread_id
=
0
;
/*
We can't use mutex_locks here if we re using windows as
We can't use mutex_locks here if we
a
re using windows as
we may have compiled the program with SAFE_MUTEX, in which
case the checking of mutex_locks will not work until
the pthread_self thread specific variable is initialized.
...
...
mysys/my_winthread.c
View file @
df280335
...
...
@@ -19,13 +19,16 @@
** Simulation of posix threads calls for WIN95 and NT
*****************************************************************************/
/* SAFE_MUTEX will not work until the thread structure is up to date */
#undef SAFE_MUTEX
#include "mysys_priv.h"
#if defined(THREAD) && defined(__WIN__)
#include <m_string.h>
#undef getpid
#include <process.h>
extern
pthread_mutex_t
THR_LOCK_thread
;
static
pthread_mutex_t
THR_LOCK_thread
;
struct
pthread_map
{
...
...
@@ -34,6 +37,11 @@ struct pthread_map
void
*
param
;
};
void
win_pthread_init
(
void
)
{
pthread_mutex_init
(
&
THR_LOCK_thread
,
NULL
);
}
/*
** We have tried to use '_beginthreadex' instead of '_beginthread' here
** but in this case the program leaks about 512 characters for each
...
...
mysys/thr_mutex.c
View file @
df280335
...
...
@@ -67,6 +67,7 @@ int safe_mutex_lock(safe_mutex_t *mp,const char *file, uint line)
{
fprintf
(
stderr
,
"safe_mutex: Trying to lock mutex at %s, line %d, when the mutex was already locked at %s, line %d
\n
"
,
file
,
line
,
mp
->
file
,
mp
->
line
);
fflush
(
stderr
);
abort
();
}
pthread_mutex_unlock
(
&
mp
->
global
);
...
...
@@ -75,11 +76,13 @@ int safe_mutex_lock(safe_mutex_t *mp,const char *file, uint line)
{
fprintf
(
stderr
,
"Got error %d when trying to lock mutex at %s, line %d
\n
"
,
error
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
if
(
mp
->
count
++
)
{
fprintf
(
stderr
,
"safe_mutex: Error in thread libray: Got mutex at %s, line %d more than 1 time
\n
"
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
mp
->
thread
=
pthread_self
();
...
...
@@ -98,12 +101,14 @@ int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line)
{
fprintf
(
stderr
,
"safe_mutex: Trying to unlock mutex that wasn't locked at %s, line %d
\n
Last used at %s, line: %d
\n
"
,
file
,
line
,
mp
->
file
?
mp
->
file
:
""
,
mp
->
line
);
fflush
(
stderr
);
abort
();
}
if
(
!
pthread_equal
(
pthread_self
(),
mp
->
thread
))
{
fprintf
(
stderr
,
"safe_mutex: Trying to unlock mutex at %s, line %d that was locked by another thread at: %s, line: %d
\n
"
,
file
,
line
,
mp
->
file
,
mp
->
line
);
fflush
(
stderr
);
abort
();
}
mp
->
count
--
;
...
...
@@ -115,6 +120,7 @@ int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line)
if
(
error
)
{
fprintf
(
stderr
,
"safe_mutex: Got error: %d when trying to unlock mutex at %s, line %d
\n
"
,
error
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
#endif
/* __WIN__ */
...
...
@@ -131,12 +137,14 @@ int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp, const char *file,
if
(
mp
->
count
==
0
)
{
fprintf
(
stderr
,
"safe_mutex: Trying to cond_wait on a unlocked mutex at %s, line %d
\n
"
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
if
(
!
pthread_equal
(
pthread_self
(),
mp
->
thread
))
{
fprintf
(
stderr
,
"safe_mutex: Trying to cond_wait on a mutex at %s, line %d that was locked by another thread at: %s, line: %d
\n
"
,
file
,
line
,
mp
->
file
,
mp
->
line
);
fflush
(
stderr
);
abort
();
}
...
...
@@ -144,6 +152,7 @@ int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp, const char *file,
{
fprintf
(
stderr
,
"safe_mutex: Count was %d on locked mutex at %s, line %d
\n
"
,
mp
->
count
+
1
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
pthread_mutex_unlock
(
&
mp
->
global
);
...
...
@@ -152,6 +161,7 @@ int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp, const char *file,
if
(
error
)
{
fprintf
(
stderr
,
"safe_mutex: Got error: %d when doing a safe_mutex_wait at %s, line %d
\n
"
,
error
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
if
(
mp
->
count
++
)
...
...
@@ -159,6 +169,7 @@ int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp, const char *file,
fprintf
(
stderr
,
"safe_mutex: Count was %d in thread %lx when locking mutex at %s, line %d
\n
"
,
mp
->
count
-
1
,
my_thread_id
(),
file
,
line
);
fflush
(
stderr
);
abort
();
}
mp
->
thread
=
pthread_self
();
...
...
@@ -178,6 +189,7 @@ int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
if
(
mp
->
count
!=
1
||
!
pthread_equal
(
pthread_self
(),
mp
->
thread
))
{
fprintf
(
stderr
,
"safe_mutex: Trying to cond_wait at %s, line %d on a not hold mutex
\n
"
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
mp
->
count
--
;
/* Mutex will be released */
...
...
@@ -195,6 +207,7 @@ int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp,
fprintf
(
stderr
,
"safe_mutex: Count was %d in thread %lx when locking mutex at %s, line %d (error: %d)
\n
"
,
mp
->
count
-
1
,
my_thread_id
(),
file
,
line
,
error
);
fflush
(
stderr
);
abort
();
}
mp
->
thread
=
pthread_self
();
...
...
@@ -211,6 +224,7 @@ int safe_mutex_destroy(safe_mutex_t *mp, const char *file, uint line)
{
fprintf
(
stderr
,
"safe_mutex: Trying to destroy a mutex that was locked at %s, line %d at %s, line %d
\n
"
,
mp
->
file
,
mp
->
line
,
file
,
line
);
fflush
(
stderr
);
abort
();
}
#ifdef __WIN__
...
...
sql/ha_myisammrg.cc
View file @
df280335
...
...
@@ -48,7 +48,7 @@ int ha_myisammrg::open(const char *name, int mode, int test_if_locked)
info
(
HA_STATUS_NO_LOCK
|
HA_STATUS_VARIABLE
|
HA_STATUS_CONST
);
if
(
!
(
test_if_locked
&
HA_OPEN_WAIT_IF_LOCKED
))
myrg_extra
(
file
,
HA_EXTRA_WAIT_LOCK
);
if
(
table
->
reclength
!=
mean_rec_length
)
if
(
table
->
reclength
!=
mean_rec_length
&&
mean_rec_length
)
{
DBUG_PRINT
(
"error"
,(
"reclength: %d mean_rec_length: %d"
,
table
->
reclength
,
mean_rec_length
));
...
...
sql/mysqld.cc
View file @
df280335
...
...
@@ -2400,7 +2400,7 @@ struct show_var_st init_vars[]= {
{
"interactive_timeout"
,
(
char
*
)
&
net_interactive_timeout
,
SHOW_LONG
},
{
"key_buffer_size"
,
(
char
*
)
&
keybuff_size
,
SHOW_LONG
},
{
"language"
,
language
,
SHOW_CHAR
},
#ifdef HAVE_M
EM
LOCKALL
#ifdef HAVE_MLOCKALL
{
"locked_in_memory"
,
(
char
*
)
&
locked_in_memory
,
SHOW_BOOL
},
#endif
{
"log"
,
(
char
*
)
&
opt_log
,
SHOW_BOOL
},
...
...
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