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
71215f68
Commit
71215f68
authored
Jul 22, 2005
by
stewart@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge ssmith@bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/stewart/Documents/MySQL/4.0/main
parents
d5cb88ce
9f5e591f
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
149 additions
and
129 deletions
+149
-129
include/thr_lock.h
include/thr_lock.h
+1
-1
mysys/thr_lock.c
mysys/thr_lock.c
+5
-2
scripts/Makefile.am
scripts/Makefile.am
+1
-5
sql/lock.cc
sql/lock.cc
+17
-6
sql/mysql_priv.h
sql/mysql_priv.h
+6
-2
sql/sql_base.cc
sql/sql_base.cc
+80
-42
sql/sql_table.cc
sql/sql_table.cc
+12
-23
support-files/MacOSX/Makefile.am
support-files/MacOSX/Makefile.am
+0
-6
support-files/Makefile.am
support-files/Makefile.am
+1
-3
support-files/mysql.spec.sh
support-files/mysql.spec.sh
+26
-39
No files found.
include/thr_lock.h
View file @
71215f68
...
@@ -107,7 +107,7 @@ void thr_unlock(THR_LOCK_DATA *data);
...
@@ -107,7 +107,7 @@ void thr_unlock(THR_LOCK_DATA *data);
int
thr_multi_lock
(
THR_LOCK_DATA
**
data
,
uint
count
);
int
thr_multi_lock
(
THR_LOCK_DATA
**
data
,
uint
count
);
void
thr_multi_unlock
(
THR_LOCK_DATA
**
data
,
uint
count
);
void
thr_multi_unlock
(
THR_LOCK_DATA
**
data
,
uint
count
);
void
thr_abort_locks
(
THR_LOCK
*
lock
);
void
thr_abort_locks
(
THR_LOCK
*
lock
);
void
thr_abort_locks_for_thread
(
THR_LOCK
*
lock
,
pthread_t
thread
);
bool
thr_abort_locks_for_thread
(
THR_LOCK
*
lock
,
pthread_t
thread
);
void
thr_print_locks
(
void
);
/* For debugging */
void
thr_print_locks
(
void
);
/* For debugging */
my_bool
thr_upgrade_write_delay_lock
(
THR_LOCK_DATA
*
data
);
my_bool
thr_upgrade_write_delay_lock
(
THR_LOCK_DATA
*
data
);
my_bool
thr_reschedule_write_lock
(
THR_LOCK_DATA
*
data
);
my_bool
thr_reschedule_write_lock
(
THR_LOCK_DATA
*
data
);
...
...
mysys/thr_lock.c
View file @
71215f68
...
@@ -966,9 +966,10 @@ void thr_abort_locks(THR_LOCK *lock)
...
@@ -966,9 +966,10 @@ void thr_abort_locks(THR_LOCK *lock)
This is used to abort all locks for a specific thread
This is used to abort all locks for a specific thread
*/
*/
void
thr_abort_locks_for_thread
(
THR_LOCK
*
lock
,
pthread_t
thread
)
bool
thr_abort_locks_for_thread
(
THR_LOCK
*
lock
,
pthread_t
thread
)
{
{
THR_LOCK_DATA
*
data
;
THR_LOCK_DATA
*
data
;
bool
found
=
FALSE
;
DBUG_ENTER
(
"thr_abort_locks_for_thread"
);
DBUG_ENTER
(
"thr_abort_locks_for_thread"
);
pthread_mutex_lock
(
&
lock
->
mutex
);
pthread_mutex_lock
(
&
lock
->
mutex
);
...
@@ -978,6 +979,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
...
@@ -978,6 +979,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
{
{
DBUG_PRINT
(
"info"
,(
"Aborting read-wait lock"
));
DBUG_PRINT
(
"info"
,(
"Aborting read-wait lock"
));
data
->
type
=
TL_UNLOCK
;
/* Mark killed */
data
->
type
=
TL_UNLOCK
;
/* Mark killed */
found
=
TRUE
;
pthread_cond_signal
(
data
->
cond
);
pthread_cond_signal
(
data
->
cond
);
data
->
cond
=
0
;
/* Removed from list */
data
->
cond
=
0
;
/* Removed from list */
...
@@ -993,6 +995,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
...
@@ -993,6 +995,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
{
{
DBUG_PRINT
(
"info"
,(
"Aborting write-wait lock"
));
DBUG_PRINT
(
"info"
,(
"Aborting write-wait lock"
));
data
->
type
=
TL_UNLOCK
;
data
->
type
=
TL_UNLOCK
;
found
=
TRUE
;
pthread_cond_signal
(
data
->
cond
);
pthread_cond_signal
(
data
->
cond
);
data
->
cond
=
0
;
data
->
cond
=
0
;
...
@@ -1003,7 +1006,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
...
@@ -1003,7 +1006,7 @@ void thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
}
}
}
}
pthread_mutex_unlock
(
&
lock
->
mutex
);
pthread_mutex_unlock
(
&
lock
->
mutex
);
DBUG_
VOID_RETURN
;
DBUG_
RETURN
(
found
)
;
}
}
...
...
scripts/Makefile.am
View file @
71215f68
...
@@ -32,9 +32,7 @@ bin_SCRIPTS = @server_scripts@ \
...
@@ -32,9 +32,7 @@ bin_SCRIPTS = @server_scripts@ \
mysqldumpslow
\
mysqldumpslow
\
mysql_explain_log
\
mysql_explain_log
\
mysql_tableinfo
\
mysql_tableinfo
\
mysqld_multi
\
mysqld_multi
make_win_src_distribution
\
make_win_binary_distribution
EXTRA_SCRIPTS
=
make_binary_distribution.sh
\
EXTRA_SCRIPTS
=
make_binary_distribution.sh
\
make_sharedlib_distribution.sh
\
make_sharedlib_distribution.sh
\
...
@@ -63,8 +61,6 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) \
...
@@ -63,8 +61,6 @@ EXTRA_DIST = $(EXTRA_SCRIPTS) \
mysqlaccess.conf
\
mysqlaccess.conf
\
mysqlbug
mysqlbug
pkgdata_DATA
=
make_binary_distribution make_sharedlib_distribution
# mysqlbug should be distributed built so that people can report build
# mysqlbug should be distributed built so that people can report build
# failures with it.
# failures with it.
CLEANFILES
=
@server_scripts@
\
CLEANFILES
=
@server_scripts@
\
...
...
sql/lock.cc
View file @
71215f68
...
@@ -333,20 +333,25 @@ void mysql_lock_abort(THD *thd, TABLE *table)
...
@@ -333,20 +333,25 @@ void mysql_lock_abort(THD *thd, TABLE *table)
/* Abort one thread / table combination */
/* Abort one thread / table combination */
void
mysql_lock_abort_for_thread
(
THD
*
thd
,
TABLE
*
table
)
bool
mysql_lock_abort_for_thread
(
THD
*
thd
,
TABLE
*
table
)
{
{
MYSQL_LOCK
*
locked
;
MYSQL_LOCK
*
locked
;
TABLE
*
write_lock_used
;
TABLE
*
write_lock_used
;
bool
result
=
FALSE
;
DBUG_ENTER
(
"mysql_lock_abort_for_thread"
);
DBUG_ENTER
(
"mysql_lock_abort_for_thread"
);
if
((
locked
=
get_lock_data
(
thd
,
&
table
,
1
,
1
,
&
write_lock_used
)))
if
((
locked
=
get_lock_data
(
thd
,
&
table
,
1
,
1
,
&
write_lock_used
)))
{
{
for
(
uint
i
=
0
;
i
<
locked
->
lock_count
;
i
++
)
for
(
uint
i
=
0
;
i
<
locked
->
lock_count
;
i
++
)
thr_abort_locks_for_thread
(
locked
->
locks
[
i
]
->
lock
,
{
table
->
in_use
->
real_id
);
bool
found
;
found
=
thr_abort_locks_for_thread
(
locked
->
locks
[
i
]
->
lock
,
table
->
in_use
->
real_id
);
result
|=
found
;
}
my_free
((
gptr
)
locked
,
MYF
(
0
));
my_free
((
gptr
)
locked
,
MYF
(
0
));
}
}
DBUG_
VOID_RETURN
;
DBUG_
RETURN
(
result
)
;
}
}
...
@@ -542,8 +547,14 @@ int lock_table_name(THD *thd, TABLE_LIST *table_list)
...
@@ -542,8 +547,14 @@ int lock_table_name(THD *thd, TABLE_LIST *table_list)
my_free
((
gptr
)
table
,
MYF
(
0
));
my_free
((
gptr
)
table
,
MYF
(
0
));
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
}
}
if
(
remove_table_from_cache
(
thd
,
db
,
table_list
->
real_name
))
DBUG_RETURN
(
1
);
// Table is in use
{
if
(
remove_table_from_cache
(
thd
,
db
,
table_list
->
real_name
,
RTFC_NO_FLAG
))
{
DBUG_RETURN
(
1
);
// Table is in use
}
}
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
...
...
sql/mysql_priv.h
View file @
71215f68
...
@@ -606,8 +606,12 @@ bool rename_temporary_table(THD* thd, TABLE *table, const char *new_db,
...
@@ -606,8 +606,12 @@ bool rename_temporary_table(THD* thd, TABLE *table, const char *new_db,
const
char
*
table_name
);
const
char
*
table_name
);
void
remove_db_from_cache
(
const
my_string
db
);
void
remove_db_from_cache
(
const
my_string
db
);
void
flush_tables
();
void
flush_tables
();
#define RTFC_NO_FLAG 0x0000
#define RTFC_OWNED_BY_THD_FLAG 0x0001
#define RTFC_WAIT_OTHER_THREAD_FLAG 0x0002
#define RTFC_CHECK_KILLED_FLAG 0x0004
bool
remove_table_from_cache
(
THD
*
thd
,
const
char
*
db
,
const
char
*
table
,
bool
remove_table_from_cache
(
THD
*
thd
,
const
char
*
db
,
const
char
*
table
,
bool
return_if_owned_by_thd
=
0
);
uint
flags
);
bool
close_cached_tables
(
THD
*
thd
,
bool
wait_for_refresh
,
TABLE_LIST
*
tables
);
bool
close_cached_tables
(
THD
*
thd
,
bool
wait_for_refresh
,
TABLE_LIST
*
tables
);
void
copy_field_from_tmp_record
(
Field
*
field
,
int
offset
);
void
copy_field_from_tmp_record
(
Field
*
field
,
int
offset
);
int
fill_record
(
List
<
Item
>
&
fields
,
List
<
Item
>
&
values
,
bool
ignore_errors
);
int
fill_record
(
List
<
Item
>
&
fields
,
List
<
Item
>
&
values
,
bool
ignore_errors
);
...
@@ -776,7 +780,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock);
...
@@ -776,7 +780,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock);
void
mysql_unlock_some_tables
(
THD
*
thd
,
TABLE
**
table
,
uint
count
);
void
mysql_unlock_some_tables
(
THD
*
thd
,
TABLE
**
table
,
uint
count
);
void
mysql_lock_remove
(
THD
*
thd
,
MYSQL_LOCK
*
locked
,
TABLE
*
table
);
void
mysql_lock_remove
(
THD
*
thd
,
MYSQL_LOCK
*
locked
,
TABLE
*
table
);
void
mysql_lock_abort
(
THD
*
thd
,
TABLE
*
table
);
void
mysql_lock_abort
(
THD
*
thd
,
TABLE
*
table
);
void
mysql_lock_abort_for_thread
(
THD
*
thd
,
TABLE
*
table
);
bool
mysql_lock_abort_for_thread
(
THD
*
thd
,
TABLE
*
table
);
MYSQL_LOCK
*
mysql_lock_merge
(
MYSQL_LOCK
*
a
,
MYSQL_LOCK
*
b
);
MYSQL_LOCK
*
mysql_lock_merge
(
MYSQL_LOCK
*
a
,
MYSQL_LOCK
*
b
);
bool
lock_global_read_lock
(
THD
*
thd
);
bool
lock_global_read_lock
(
THD
*
thd
);
void
unlock_global_read_lock
(
THD
*
thd
);
void
unlock_global_read_lock
(
THD
*
thd
);
...
...
sql/sql_base.cc
View file @
71215f68
...
@@ -370,7 +370,8 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
...
@@ -370,7 +370,8 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
bool
found
=
0
;
bool
found
=
0
;
for
(
TABLE_LIST
*
table
=
tables
;
table
;
table
=
table
->
next
)
for
(
TABLE_LIST
*
table
=
tables
;
table
;
table
=
table
->
next
)
{
{
if
(
remove_table_from_cache
(
thd
,
table
->
db
,
table
->
real_name
,
1
))
if
(
remove_table_from_cache
(
thd
,
table
->
db
,
table
->
real_name
,
RTFC_OWNED_BY_THD_FLAG
))
found
=
1
;
found
=
1
;
}
}
if
(
!
found
)
if
(
!
found
)
...
@@ -2407,62 +2408,99 @@ void flush_tables()
...
@@ -2407,62 +2408,99 @@ void flush_tables()
*/
*/
bool
remove_table_from_cache
(
THD
*
thd
,
const
char
*
db
,
const
char
*
table_name
,
bool
remove_table_from_cache
(
THD
*
thd
,
const
char
*
db
,
const
char
*
table_name
,
bool
return_if_owned_by_thd
)
uint
flags
)
{
{
char
key
[
MAX_DBKEY_LENGTH
];
char
key
[
MAX_DBKEY_LENGTH
];
uint
key_length
;
uint
key_length
;
TABLE
*
table
;
TABLE
*
table
;
bool
result
=
0
;
bool
result
=
0
,
signalled
=
0
;
DBUG_ENTER
(
"remove_table_from_cache"
);
DBUG_ENTER
(
"remove_table_from_cache"
);
key_length
=
(
uint
)
(
strmov
(
strmov
(
key
,
db
)
+
1
,
table_name
)
-
key
)
+
1
;
key_length
=
(
uint
)
(
strmov
(
strmov
(
key
,
db
)
+
1
,
table_name
)
-
key
)
+
1
;
for
(
table
=
(
TABLE
*
)
hash_search
(
&
open_cache
,(
byte
*
)
key
,
key_length
)
;
for
(;;)
table
;
table
=
(
TABLE
*
)
hash_next
(
&
open_cache
,(
byte
*
)
key
,
key_length
))
{
{
THD
*
in_use
;
result
=
signalled
=
0
;
table
->
version
=
0L
;
/* Free when thread is ready */
if
(
!
(
in_use
=
table
->
in_use
))
for
(
table
=
(
TABLE
*
)
hash_search
(
&
open_cache
,(
byte
*
)
key
,
key_length
)
;
{
table
;
DBUG_PRINT
(
"info"
,(
"Table was not in use"
));
table
=
(
TABLE
*
)
hash_next
(
&
open_cache
,(
byte
*
)
key
,
key_length
))
relink_unused
(
table
);
}
else
if
(
in_use
!=
thd
)
{
{
in_use
->
some_tables_deleted
=
1
;
THD
*
in_use
;
if
(
table
->
db_stat
)
table
->
version
=
0L
;
/* Free when thread is ready */
result
=
1
;
if
(
!
(
in_use
=
table
->
in_use
))
/* Kill delayed insert threads */
if
((
in_use
->
system_thread
&
SYSTEM_THREAD_DELAYED_INSERT
)
&&
!
in_use
->
killed
)
{
{
in_use
->
killed
=
1
;
DBUG_PRINT
(
"info"
,(
"Table was not in use"
));
pthread_mutex_lock
(
&
in_use
->
mysys_var
->
mutex
);
relink_unused
(
table
);
if
(
in_use
->
mysys_var
->
current_cond
)
{
pthread_mutex_lock
(
in_use
->
mysys_var
->
current_mutex
);
pthread_cond_broadcast
(
in_use
->
mysys_var
->
current_cond
);
pthread_mutex_unlock
(
in_use
->
mysys_var
->
current_mutex
);
}
pthread_mutex_unlock
(
&
in_use
->
mysys_var
->
mutex
);
}
}
/*
else
if
(
in_use
!=
thd
)
Now we must abort all tables locks used by this thread
{
as the thread may be waiting to get a lock for another table
in_use
->
some_tables_deleted
=
1
;
*/
if
(
table
->
db_stat
)
for
(
TABLE
*
thd_table
=
in_use
->
open_tables
;
result
=
1
;
thd_table
;
/* Kill delayed insert threads */
thd_table
=
thd_table
->
next
)
if
((
in_use
->
system_thread
&
SYSTEM_THREAD_DELAYED_INSERT
)
&&
!
in_use
->
killed
)
{
in_use
->
killed
=
1
;
pthread_mutex_lock
(
&
in_use
->
mysys_var
->
mutex
);
if
(
in_use
->
mysys_var
->
current_cond
)
{
pthread_mutex_lock
(
in_use
->
mysys_var
->
current_mutex
);
signalled
=
1
;
pthread_cond_broadcast
(
in_use
->
mysys_var
->
current_cond
);
pthread_mutex_unlock
(
in_use
->
mysys_var
->
current_mutex
);
}
pthread_mutex_unlock
(
&
in_use
->
mysys_var
->
mutex
);
}
/*
Now we must abort all tables locks used by this thread
as the thread may be waiting to get a lock for another table
*/
for
(
TABLE
*
thd_table
=
in_use
->
open_tables
;
thd_table
;
thd_table
=
thd_table
->
next
)
{
if
(
thd_table
->
db_stat
)
// If table is open
signalled
|=
mysql_lock_abort_for_thread
(
thd
,
thd_table
);
}
}
else
result
=
result
||
(
flags
&
RTFC_OWNED_BY_THD_FLAG
);
}
while
(
unused_tables
&&
!
unused_tables
->
version
)
VOID
(
hash_delete
(
&
open_cache
,(
byte
*
)
unused_tables
));
if
(
result
&&
(
flags
&
RTFC_WAIT_OTHER_THREAD_FLAG
))
{
if
(
!
(
flags
&
RTFC_CHECK_KILLED_FLAG
)
||
!
thd
->
killed
)
{
{
if
(
thd_table
->
db_stat
)
// If table is open
if
(
likely
(
signalled
))
mysql_lock_abort_for_thread
(
thd
,
thd_table
);
{
dropping_tables
++
;
(
void
)
pthread_cond_wait
(
&
COND_refresh
,
&
LOCK_open
);
dropping_tables
--
;
continue
;
}
else
{
/*
It can happen that another thread has opened the
table but has not yet locked any table at all. Since
it can be locked waiting for a table that our thread
has done LOCK TABLE x WRITE on previously, we need to
ensure that the thread actually hears our signal
before we go to sleep. Thus we wait for a short time
and then we retry another loop in the
remove_table_from_cache routine.
*/
pthread_mutex_unlock
(
&
LOCK_open
);
my_sleep
(
10
);
pthread_mutex_lock
(
&
LOCK_open
);
continue
;
}
}
}
}
}
else
break
;
result
=
result
||
return_if_owned_by_thd
;
}
}
while
(
unused_tables
&&
!
unused_tables
->
version
)
VOID
(
hash_delete
(
&
open_cache
,(
byte
*
)
unused_tables
));
DBUG_RETURN
(
result
);
DBUG_RETURN
(
result
);
}
}
...
...
sql/sql_table.cc
View file @
71215f68
...
@@ -178,6 +178,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
...
@@ -178,6 +178,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
for
(
table
=
tables
;
table
;
table
=
table
->
next
)
for
(
table
=
tables
;
table
;
table
=
table
->
next
)
{
{
char
*
db
=
table
->
db
;
char
*
db
=
table
->
db
;
uint
flags
;
mysql_ha_flush
(
thd
,
table
,
MYSQL_HA_CLOSE_FINAL
);
mysql_ha_flush
(
thd
,
table
,
MYSQL_HA_CLOSE_FINAL
);
if
(
!
close_temporary_table
(
thd
,
db
,
table
->
real_name
))
if
(
!
close_temporary_table
(
thd
,
db
,
table
->
real_name
))
{
{
...
@@ -186,12 +187,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
...
@@ -186,12 +187,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
}
}
abort_locked_tables
(
thd
,
db
,
table
->
real_name
);
abort_locked_tables
(
thd
,
db
,
table
->
real_name
);
while
(
remove_table_from_cache
(
thd
,
db
,
table
->
real_name
)
&&
!
thd
->
killed
)
flags
=
RTFC_WAIT_OTHER_THREAD_FLAG
|
RTFC_CHECK_KILLED_FLAG
;
{
remove_table_from_cache
(
thd
,
db
,
table
->
real_name
,
flags
);
dropping_tables
++
;
(
void
)
pthread_cond_wait
(
&
COND_refresh
,
&
LOCK_open
);
dropping_tables
--
;
}
drop_locked_tables
(
thd
,
db
,
table
->
real_name
);
drop_locked_tables
(
thd
,
db
,
table
->
real_name
);
if
(
thd
->
killed
)
if
(
thd
->
killed
)
DBUG_RETURN
(
-
1
);
DBUG_RETURN
(
-
1
);
...
@@ -988,13 +985,8 @@ static void wait_while_table_is_used(THD *thd,TABLE *table,
...
@@ -988,13 +985,8 @@ static void wait_while_table_is_used(THD *thd,TABLE *table,
mysql_lock_abort
(
thd
,
table
);
// end threads waiting on lock
mysql_lock_abort
(
thd
,
table
);
// end threads waiting on lock
/* Wait until all there are no other threads that has this table open */
/* Wait until all there are no other threads that has this table open */
while
(
remove_table_from_cache
(
thd
,
table
->
table_cache_key
,
remove_table_from_cache
(
thd
,
table
->
table_cache_key
,
table
->
real_name
))
table
->
real_name
,
RTFC_WAIT_OTHER_THREAD_FLAG
);
{
dropping_tables
++
;
(
void
)
pthread_cond_wait
(
&
COND_refresh
,
&
LOCK_open
);
dropping_tables
--
;
}
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1306,18 +1298,14 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
...
@@ -1306,18 +1298,14 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
/* Close all instances of the table to allow repair to rename files */
/* Close all instances of the table to allow repair to rename files */
if
(
lock_type
==
TL_WRITE
&&
table
->
table
->
version
)
if
(
lock_type
==
TL_WRITE
&&
table
->
table
->
version
)
{
{
uint
flags
;
pthread_mutex_lock
(
&
LOCK_open
);
pthread_mutex_lock
(
&
LOCK_open
);
const
char
*
old_message
=
thd
->
enter_cond
(
&
COND_refresh
,
&
LOCK_open
,
const
char
*
old_message
=
thd
->
enter_cond
(
&
COND_refresh
,
&
LOCK_open
,
"Waiting to get writelock"
);
"Waiting to get writelock"
);
mysql_lock_abort
(
thd
,
table
->
table
);
mysql_lock_abort
(
thd
,
table
->
table
);
while
(
remove_table_from_cache
(
thd
,
table
->
table
->
table_cache_key
,
flags
=
RTFC_WAIT_OTHER_THREAD_FLAG
|
RTFC_CHECK_KILLED_FLAG
;
table
->
table
->
real_name
)
&&
remove_table_from_cache
(
thd
,
table
->
table
->
table_cache_key
,
!
thd
->
killed
)
table
->
table
->
real_name
,
flags
);
{
dropping_tables
++
;
(
void
)
pthread_cond_wait
(
&
COND_refresh
,
&
LOCK_open
);
dropping_tables
--
;
}
thd
->
exit_cond
(
old_message
);
thd
->
exit_cond
(
old_message
);
if
(
thd
->
killed
)
if
(
thd
->
killed
)
goto
err
;
goto
err
;
...
@@ -1384,7 +1372,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
...
@@ -1384,7 +1372,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
{
{
pthread_mutex_lock
(
&
LOCK_open
);
pthread_mutex_lock
(
&
LOCK_open
);
remove_table_from_cache
(
thd
,
table
->
table
->
table_cache_key
,
remove_table_from_cache
(
thd
,
table
->
table
->
table_cache_key
,
table
->
table
->
real_name
);
table
->
table
->
real_name
,
RTFC_NO_FLAG
);
pthread_mutex_unlock
(
&
LOCK_open
);
pthread_mutex_unlock
(
&
LOCK_open
);
/* May be something modified consequently we have to invalidate cache */
/* May be something modified consequently we have to invalidate cache */
query_cache_invalidate3
(
thd
,
table
->
table
,
0
);
query_cache_invalidate3
(
thd
,
table
->
table
,
0
);
...
@@ -2109,7 +2097,8 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
...
@@ -2109,7 +2097,8 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
if
(
table
)
if
(
table
)
{
{
VOID
(
table
->
file
->
extra
(
HA_EXTRA_FORCE_REOPEN
));
// Use new file
VOID
(
table
->
file
->
extra
(
HA_EXTRA_FORCE_REOPEN
));
// Use new file
remove_table_from_cache
(
thd
,
db
,
table_name
);
// Mark all in-use copies old
remove_table_from_cache
(
thd
,
db
,
table_name
,
RTFC_NO_FLAG
);
// Mark in-use copies old
mysql_lock_abort
(
thd
,
table
);
// end threads waiting on lock
mysql_lock_abort
(
thd
,
table
);
// end threads waiting on lock
}
}
VOID
(
quick_rm_table
(
old_db_type
,
db
,
old_name
));
VOID
(
quick_rm_table
(
old_db_type
,
db
,
old_name
));
...
...
support-files/MacOSX/Makefile.am
View file @
71215f68
...
@@ -28,12 +28,6 @@ EXTRA_DIST = Info.plist.sh \
...
@@ -28,12 +28,6 @@ EXTRA_DIST = Info.plist.sh \
StartupItem.Info.plist
\
StartupItem.Info.plist
\
StartupItem.postinstall
StartupItem.postinstall
pkgdata_DATA
=
Info.plist
\
Description.plist
\
StartupParameters.plist
\
postinstall
\
preinstall
CLEANFILES
=
Info.plist
\
CLEANFILES
=
Info.plist
\
Description.plist
\
Description.plist
\
StartupParameters.plist
\
StartupParameters.plist
\
...
...
support-files/Makefile.am
View file @
71215f68
...
@@ -37,9 +37,7 @@ pkgdata_DATA = my-small.cnf \
...
@@ -37,9 +37,7 @@ pkgdata_DATA = my-small.cnf \
my-huge.cnf
\
my-huge.cnf
\
my-innodb-heavy-4G.cnf
\
my-innodb-heavy-4G.cnf
\
mysql-log-rotate
\
mysql-log-rotate
\
mysql-@VERSION@.spec
\
binary-configure
binary-configure
\
MySQL-shared-compat.spec
pkgdata_SCRIPTS
=
mysql.server
pkgdata_SCRIPTS
=
mysql.server
...
...
support-files/mysql.spec.sh
View file @
71215f68
%define mysql_version @VERSION@
%define mysql_version @VERSION@
%define release 0
%define release 0
%define license GPL
%define mysqld_user mysql
%define mysqld_user mysql
%define server_suffix
-standard
%define server_suffix
-standard
%define mysqldatadir /var/lib/mysql
# We don't package all files installed into the build root by intention -
# We don't package all files installed into the build root by intention -
# See BUG#998 for details.
# See BUG#998 for details.
...
@@ -12,11 +14,9 @@
...
@@ -12,11 +14,9 @@
Name: MySQL
Name: MySQL
Summary: MySQL: a very fast and reliable SQL database server
Summary: MySQL: a very fast and reliable SQL database server
Group: Applications/Databases
Group: Applications/Databases
Summary
(
pt_BR
)
: MySQL: Um servidor SQL rpido e confivel.
Group
(
pt_BR
)
: Aplicaes/Banco_de_Dados
Version: @MYSQL_NO_DASH_VERSION@
Version: @MYSQL_NO_DASH_VERSION@
Release: %
{
release
}
Release: %
{
release
}
License:
GPL
License:
%
{
license
}
Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/mysql-%
{
mysql_version
}
.tar.gz
Source: http://www.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/mysql-%
{
mysql_version
}
.tar.gz
URL: http://www.mysql.com/
URL: http://www.mysql.com/
Packager: Lenz Grimmer <build@mysql.com>
Packager: Lenz Grimmer <build@mysql.com>
...
@@ -50,11 +50,8 @@ news and information about the MySQL software. Also please see the
...
@@ -50,11 +50,8 @@ news and information about the MySQL software. Also please see the
documentation and the manual
for
more information.
documentation and the manual
for
more information.
%package server
%package server
Release: %
{
release
}
Summary: MySQL: a very fast and reliable SQL database server
Summary: MySQL: a very fast and reliable SQL database server
Group: Applications/Databases
Group: Applications/Databases
Summary
(
pt_BR
)
: MySQL: Um servidor SQL rpido e confivel.
Group
(
pt_BR
)
: Aplicaes/Banco_de_Dados
Requires: fileutils sh-utils
Requires: fileutils sh-utils
Provides: msqlormysql mysql-server mysql MySQL
Provides: msqlormysql mysql-server mysql MySQL
Obsoletes: MySQL mysql mysql-server
Obsoletes: MySQL mysql mysql-server
...
@@ -85,11 +82,8 @@ If you want to access and work with the database, you have to install
...
@@ -85,11 +82,8 @@ If you want to access and work with the database, you have to install
package
"MySQL-client"
as well!
package
"MySQL-client"
as well!
%package client
%package client
Release: %
{
release
}
Summary: MySQL - Client
Summary: MySQL - Client
Group: Applications/Databases
Group: Applications/Databases
Summary
(
pt_BR
)
: MySQL - Cliente
Group
(
pt_BR
)
: Aplicaes/Banco_de_Dados
Obsoletes: mysql-client
Obsoletes: mysql-client
Provides: mysql-client
Provides: mysql-client
...
@@ -98,16 +92,11 @@ This package contains the standard MySQL clients and administration tools.
...
@@ -98,16 +92,11 @@ This package contains the standard MySQL clients and administration tools.
%
{
see_base
}
%
{
see_base
}
%description client
-l
pt_BR
Este pacote contm os clientes padro para o MySQL.
%package bench
%package bench
Release: %
{
release
}
Requires: %
{
name
}
-client
perl-DBI perl
Requires: %
{
name
}
-client
perl-DBI perl
Summary: MySQL - Benchmarks and
test
system
Summary: MySQL - Benchmarks and
test
system
Group: Applications/Databases
Group: Applications/Databases
Summary
(
pt_BR
)
: MySQL - Medies de desempenho
Group
(
pt_BR
)
: Aplicaes/Banco_de_Dados
Provides: mysql-bench
Provides: mysql-bench
Obsoletes: mysql-bench
Obsoletes: mysql-bench
...
@@ -116,15 +105,9 @@ This package contains MySQL benchmark scripts and data.
...
@@ -116,15 +105,9 @@ This package contains MySQL benchmark scripts and data.
%
{
see_base
}
%
{
see_base
}
%description bench
-l
pt_BR
Este pacote contm medies de desempenho de scripts e dados
do
MySQL.
%package devel
%package devel
Release: %
{
release
}
Summary: MySQL - Development header files and libraries
Summary: MySQL - Development header files and libraries
Group: Applications/Databases
Group: Applications/Databases
Summary
(
pt_BR
)
: MySQL - Medies de desempenho
Group
(
pt_BR
)
: Aplicaes/Banco_de_Dados
Provides: mysql-devel
Provides: mysql-devel
Obsoletes: mysql-devel
Obsoletes: mysql-devel
...
@@ -134,12 +117,7 @@ necessary to develop MySQL client applications.
...
@@ -134,12 +117,7 @@ necessary to develop MySQL client applications.
%
{
see_base
}
%
{
see_base
}
%description devel
-l
pt_BR
Este pacote contm os arquivos de cabealho
(
header files
)
e bibliotecas
necessrias para desenvolver aplicaes clientes
do
MySQL.
%package shared
%package shared
Release: %
{
release
}
Summary: MySQL - Shared libraries
Summary: MySQL - Shared libraries
Group: Applications/Databases
Group: Applications/Databases
...
@@ -148,12 +126,11 @@ This package contains the shared libraries (*.so*) which certain
...
@@ -148,12 +126,11 @@ This package contains the shared libraries (*.so*) which certain
languages and applications need to dynamically load and use MySQL.
languages and applications need to dynamically load and use MySQL.
%package Max
%package Max
Release: %
{
release
}
Summary: MySQL - server with Berkeley BD, RAID and UDF support
Summary: MySQL - server with Berkeley BD, RAID and UDF support
Group: Applications/Databases
Group: Applications/Databases
Provides: mysql-Max
Provides: mysql-Max
Obsoletes: mysql-Max
Obsoletes: mysql-Max
Requires: MySQL-server
>=
4.0
Requires: MySQL-server
>=
@MYSQL_BASE_VERSION@
%description Max
%description Max
Optional MySQL server binary that supports additional features like
Optional MySQL server binary that supports additional features like
...
@@ -164,12 +141,9 @@ the standard MySQL package.
...
@@ -164,12 +141,9 @@ the standard MySQL package.
Please note that this is a dynamically linked binary!
Please note that this is a dynamically linked binary!
%package embedded
%package embedded
Release: %
{
release
}
Requires: %
{
name
}
-devel
Requires: %
{
name
}
-devel
Summary: MySQL - embedded library
Summary: MySQL - embedded library
Group: Applications/Databases
Group: Applications/Databases
Summary
(
pt_BR
)
: MySQL - Medies de desempenho
Group
(
pt_BR
)
: Aplicaes/Banco_de_Dados
Obsoletes: mysql-embedded
Obsoletes: mysql-embedded
%description embedded
%description embedded
...
@@ -216,7 +190,7 @@ sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \
...
@@ -216,7 +190,7 @@ sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \
--libdir=%{_libdir}
\
--libdir=%{_libdir}
\
--sysconfdir=%{_sysconfdir}
\
--sysconfdir=%{_sysconfdir}
\
--datadir=%{_datadir}
\
--datadir=%{_datadir}
\
--localstatedir=
/var/lib/mysql
\
--localstatedir=
%{mysqldatadir}
\
--infodir=%{_infodir}
\
--infodir=%{_infodir}
\
--includedir=%{_includedir}
\
--includedir=%{_includedir}
\
--mandir=%{_mandir}
\
--mandir=%{_mandir}
\
...
@@ -325,7 +299,7 @@ MBD=$RPM_BUILD_DIR/mysql-%{mysql_version}
...
@@ -325,7 +299,7 @@ MBD=$RPM_BUILD_DIR/mysql-%{mysql_version}
# Ensure that needed directories exists
# Ensure that needed directories exists
install
-d
$RBR
%
{
_sysconfdir
}
/
{
logrotate.d,init.d
}
install
-d
$RBR
%
{
_sysconfdir
}
/
{
logrotate.d,init.d
}
install
-d
$RBR
/var/lib/mysql
/mysql
install
-d
$RBR
%
{
mysqldatadir
}
/mysql
install
-d
$RBR
%
{
_datadir
}
/
{
sql-bench,mysql-test
}
install
-d
$RBR
%
{
_datadir
}
/
{
sql-bench,mysql-test
}
install
-d
$RBR
%
{
_includedir
}
install
-d
$RBR
%
{
_includedir
}
install
-d
$RBR
%
{
_libdir
}
install
-d
$RBR
%
{
_libdir
}
...
@@ -377,7 +351,7 @@ then
...
@@ -377,7 +351,7 @@ then
fi
fi
%post server
%post server
mysql_datadir
=
/var/lib/mysql
mysql_datadir
=
%
{
mysqldatadir
}
# Create data directory if needed
# Create data directory if needed
if
test
!
-d
$mysql_datadir
;
then
mkdir
-m755
$mysql_datadir
;
fi
if
test
!
-d
$mysql_datadir
;
then
mkdir
-m755
$mysql_datadir
;
fi
...
@@ -395,19 +369,20 @@ then
...
@@ -395,19 +369,20 @@ then
/sbin/chkconfig
--add
mysql
/sbin/chkconfig
--add
mysql
fi
fi
# Create a MySQL user. Do not report any problems if it already
# Create a MySQL user and group. Do not report any problems if it already
# exists. This is redhat specific and should be handled more portable
# exists.
useradd
-M
-r
-d
$mysql_datadir
-s
/bin/bash
-c
"MySQL server"
mysql 2> /dev/null
||
true
groupadd
-r
-c
"MySQL server"
%
{
mysqld_user
}
2> /dev/null
||
true
useradd
-M
-r
-d
$mysql_datadir
-s
/bin/bash
-c
"MySQL server"
-g
%
{
mysqld_user
}
%
{
mysqld_user
}
2> /dev/null
||
true
# Change permissions so that the user that will run the MySQL daemon
# Change permissions so that the user that will run the MySQL daemon
# owns all database files.
# owns all database files.
chown
-R
mysql
$mysql_datadir
chown
-R
%
{
mysqld_user
}
:%
{
mysqld_user
}
$mysql_datadir
# Initiate databases
# Initiate databases
mysql_install_db
-IN-RPM
--user
=
mysql
%
{
_bindir
}
/mysql_install_db
-IN-RPM
--user
=
%
{
mysqld_user
}
# Change permissions again to fix any new files.
# Change permissions again to fix any new files.
chown
-R
mysql
$mysql_datadir
chown
-R
%
{
mysqld_user
}
:%
{
mysqld_user
}
$mysql_datadir
# Fix permissions for the permission database so that only the user
# Fix permissions for the permission database so that only the user
# can read them.
# can read them.
...
@@ -587,6 +562,18 @@ fi
...
@@ -587,6 +562,18 @@ fi
# itself - note that they must be ordered by date (important when
# itself - note that they must be ordered by date (important when
# merging BK trees)
# merging BK trees)
%changelog
%changelog
*
Fri Jul 15 2005 Lenz Grimmer <lenz@mysql.com>
- create a
"mysql"
user group and assign the mysql user account to that group
in
the server postinstall section.
(
BUG 10984
)
*
Wed Jun 01 2005 Lenz Grimmer <lenz@mysql.com>
- use
"mysqldatadir"
variable instead of hard-coding the path multiple
times
- use the
"mysqld_user"
variable on all occasions a user name is referenced
- removed
(
incomplete
)
Brazilian translations
- removed redundant release tags from the subpackage descriptions
*
Wed May 25 2005 Joerg Bruehe <joerg@mysql.com>
*
Wed May 25 2005 Joerg Bruehe <joerg@mysql.com>
- Added a
"make clean"
between separate calls to
"BuildMySQL"
.
- Added a
"make clean"
between separate calls to
"BuildMySQL"
.
...
...
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