mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Merge mysql.com:/home/mysql_src/mysql-5.0
into mysql.com:/home/mysql_src/mysql-5.1-merge-of-5.0 (not all files are good, I'll fix; I'll ask some devs to check their part)
This commit is contained in:
64
sql/log.cc
64
sql/log.cc
@@ -77,7 +77,7 @@ handlerton binlog_hton = {
|
||||
NULL, /* Flush logs */
|
||||
NULL, /* Show status */
|
||||
NULL, /* Replication Report Sent Binlog */
|
||||
HTON_NOT_USER_SELECTABLE
|
||||
HTON_NOT_USER_SELECTABLE | HTON_HIDDEN
|
||||
};
|
||||
|
||||
|
||||
@@ -368,8 +368,7 @@ static int find_uniq_filename(char *name)
|
||||
MYSQL_LOG::MYSQL_LOG()
|
||||
:bytes_written(0), last_time(0), query_start(0), name(0),
|
||||
prepared_xids(0), log_type(LOG_CLOSED), file_id(1), open_count(1),
|
||||
readers_count(0), reset_pending(FALSE), write_error(FALSE), inited(FALSE),
|
||||
need_start_event(TRUE),
|
||||
write_error(FALSE), inited(FALSE), need_start_event(TRUE),
|
||||
description_event_for_exec(0), description_event_for_queue(0)
|
||||
{
|
||||
/*
|
||||
@@ -396,9 +395,7 @@ void MYSQL_LOG::cleanup()
|
||||
delete description_event_for_exec;
|
||||
(void) pthread_mutex_destroy(&LOCK_log);
|
||||
(void) pthread_mutex_destroy(&LOCK_index);
|
||||
(void) pthread_mutex_destroy(&LOCK_readers);
|
||||
(void) pthread_cond_destroy(&update_cond);
|
||||
(void) pthread_cond_destroy(&reset_cond);
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@@ -443,9 +440,7 @@ void MYSQL_LOG::init_pthread_objects()
|
||||
inited= 1;
|
||||
(void) pthread_mutex_init(&LOCK_log,MY_MUTEX_INIT_SLOW);
|
||||
(void) pthread_mutex_init(&LOCK_index, MY_MUTEX_INIT_SLOW);
|
||||
(void) pthread_mutex_init(&LOCK_readers, MY_MUTEX_INIT_SLOW);
|
||||
(void) pthread_cond_init(&update_cond, 0);
|
||||
(void) pthread_cond_init(&reset_cond, 0);
|
||||
}
|
||||
|
||||
const char *MYSQL_LOG::generate_name(const char *log_name,
|
||||
@@ -949,12 +944,6 @@ bool MYSQL_LOG::reset_logs(THD* thd)
|
||||
pthread_mutex_lock(&LOCK_log);
|
||||
pthread_mutex_lock(&LOCK_index);
|
||||
|
||||
/*
|
||||
we need one more lock to block attempts to open a log while
|
||||
we are waiting untill all log files will be closed
|
||||
*/
|
||||
pthread_mutex_lock(&LOCK_readers);
|
||||
|
||||
/*
|
||||
The following mutex is needed to ensure that no threads call
|
||||
'delete thd' as we would then risk missing a 'rollback' from this
|
||||
@@ -977,19 +966,6 @@ bool MYSQL_LOG::reset_logs(THD* thd)
|
||||
goto err;
|
||||
}
|
||||
|
||||
reset_pending= TRUE;
|
||||
/*
|
||||
send update signal just in case so that all reader threads waiting
|
||||
for log update will leave wait condition
|
||||
*/
|
||||
signal_update();
|
||||
/*
|
||||
if there are active readers wait until all of them will
|
||||
release opened files
|
||||
*/
|
||||
while (readers_count)
|
||||
pthread_cond_wait(&reset_cond, &LOCK_log);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
my_delete(linfo.log_file_name, MYF(MY_WME));
|
||||
@@ -1008,10 +984,7 @@ bool MYSQL_LOG::reset_logs(THD* thd)
|
||||
my_free((gptr) save_name, MYF(0));
|
||||
|
||||
err:
|
||||
reset_pending= FALSE;
|
||||
|
||||
(void) pthread_mutex_unlock(&LOCK_thread_count);
|
||||
pthread_mutex_unlock(&LOCK_readers);
|
||||
pthread_mutex_unlock(&LOCK_index);
|
||||
pthread_mutex_unlock(&LOCK_log);
|
||||
DBUG_RETURN(error);
|
||||
@@ -2085,12 +2058,6 @@ void MYSQL_LOG::wait_for_update(THD* thd, bool is_slave)
|
||||
{
|
||||
const char *old_msg;
|
||||
DBUG_ENTER("wait_for_update");
|
||||
|
||||
if (reset_pending)
|
||||
{
|
||||
pthread_mutex_unlock(&LOCK_log);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
old_msg= thd->enter_cond(&update_cond, &LOCK_log,
|
||||
is_slave ?
|
||||
@@ -2342,33 +2309,6 @@ void MYSQL_LOG::signal_update()
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
void MYSQL_LOG::readers_addref()
|
||||
{
|
||||
/*
|
||||
There is no necessity for reference counting on *nix, since it allows to
|
||||
delete opened files, however it is more clean way to wait
|
||||
untill all files will be closed on *nix as well.
|
||||
*/
|
||||
DBUG_ENTER("MYSQL_LOG::reader_addref");
|
||||
pthread_mutex_lock(&LOCK_log);
|
||||
pthread_mutex_lock(&LOCK_readers);
|
||||
readers_count++;
|
||||
pthread_mutex_unlock(&LOCK_readers);
|
||||
pthread_mutex_unlock(&LOCK_log);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
void MYSQL_LOG::readers_release()
|
||||
{
|
||||
DBUG_ENTER("MYSQL_LOG::reader_release");
|
||||
pthread_mutex_lock(&LOCK_log);
|
||||
readers_count--;
|
||||
if (!readers_count)
|
||||
pthread_cond_broadcast(&reset_cond);
|
||||
pthread_mutex_unlock(&LOCK_log);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
#ifdef __NT__
|
||||
void print_buffer_to_nt_eventlog(enum loglevel level, char *buff,
|
||||
uint length, int buffLen)
|
||||
|
||||
Reference in New Issue
Block a user