mariadb/sql/sql_manager.cc
unknown bcc3b17ff5 Removed bdb test cases.
BitKeeper/deleted/.del-bdb-alter-table-1.result:
  Rename: mysql-test/r/bdb-alter-table-1.result -> BitKeeper/deleted/.del-bdb-alter-table-1.result
BitKeeper/deleted/.del-bdb-alter-table-1.test:
  Rename: mysql-test/t/bdb-alter-table-1.test -> BitKeeper/deleted/.del-bdb-alter-table-1.test
BitKeeper/deleted/.del-bdb-alter-table-2-master.opt:
  Rename: mysql-test/t/bdb-alter-table-2-master.opt -> BitKeeper/deleted/.del-bdb-alter-table-2-master.opt
BitKeeper/deleted/.del-bdb-alter-table-2.result:
  Rename: mysql-test/r/bdb-alter-table-2.result -> BitKeeper/deleted/.del-bdb-alter-table-2.result
BitKeeper/deleted/.del-bdb-alter-table-2.test:
  Rename: mysql-test/t/bdb-alter-table-2.test -> BitKeeper/deleted/.del-bdb-alter-table-2.test
BitKeeper/deleted/.del-bdb-crash.result:
  Rename: mysql-test/r/bdb-crash.result -> BitKeeper/deleted/.del-bdb-crash.result
BitKeeper/deleted/.del-bdb-crash.test:
  Rename: mysql-test/t/bdb-crash.test -> BitKeeper/deleted/.del-bdb-crash.test
BitKeeper/deleted/.del-bdb-deadlock.result:
  Rename: mysql-test/r/bdb-deadlock.result -> BitKeeper/deleted/.del-bdb-deadlock.result
BitKeeper/deleted/.del-bdb-deadlock.test:
  Rename: mysql-test/t/bdb-deadlock.test -> BitKeeper/deleted/.del-bdb-deadlock.test
BitKeeper/deleted/.del-bdb-deadlock.tminus:
  Rename: mysql-test/t/bdb-deadlock.tminus -> BitKeeper/deleted/.del-bdb-deadlock.tminus
BitKeeper/deleted/.del-bdb.result:
  Rename: mysql-test/r/bdb.result -> BitKeeper/deleted/.del-bdb.result
BitKeeper/deleted/.del-bdb.test:
  Rename: mysql-test/t/bdb.test -> BitKeeper/deleted/.del-bdb.test
BitKeeper/deleted/.del-bdb_cache-master.opt~e54093fff2e73631:
  Rename: mysql-test/t/bdb_cache-master.opt -> BitKeeper/deleted/.del-bdb_cache-master.opt~e54093fff2e73631
BitKeeper/deleted/.del-bdb_cache.result~5767ff4f4b228a66:
  Rename: mysql-test/r/bdb_cache.result -> BitKeeper/deleted/.del-bdb_cache.result~5767ff4f4b228a66
BitKeeper/deleted/.del-bdb_cache.test~818df448403a5598:
  Rename: mysql-test/t/bdb_cache.test -> BitKeeper/deleted/.del-bdb_cache.test~818df448403a5598
BitKeeper/deleted/.del-bdb_gis.result:
  Rename: mysql-test/r/bdb_gis.result -> BitKeeper/deleted/.del-bdb_gis.result
BitKeeper/deleted/.del-bdb_gis.test:
  Rename: mysql-test/t/bdb_gis.test -> BitKeeper/deleted/.del-bdb_gis.test
BitKeeper/deleted/.del-have_bdb.inc:
  Rename: mysql-test/include/have_bdb.inc -> BitKeeper/deleted/.del-have_bdb.inc
BitKeeper/deleted/.del-have_bdb.require:
  Rename: mysql-test/r/have_bdb.require -> BitKeeper/deleted/.del-have_bdb.require
BitKeeper/deleted/.del-index_merge_bdb.result:
  Rename: mysql-test/r/index_merge_bdb.result -> BitKeeper/deleted/.del-index_merge_bdb.result
BitKeeper/deleted/.del-index_merge_bdb.test:
  Rename: mysql-test/t/index_merge_bdb.test -> BitKeeper/deleted/.del-index_merge_bdb.test
BitKeeper/deleted/.del-ps_6bdb.result:
  Rename: mysql-test/r/ps_6bdb.result -> BitKeeper/deleted/.del-ps_6bdb.result
BitKeeper/deleted/.del-ps_6bdb.test:
  Rename: mysql-test/t/ps_6bdb.test -> BitKeeper/deleted/.del-ps_6bdb.test
BitKeeper/deleted/.del-rowid_order_bdb.result:
  Rename: mysql-test/r/rowid_order_bdb.result -> BitKeeper/deleted/.del-rowid_order_bdb.result
BitKeeper/deleted/.del-rowid_order_bdb.test:
  Rename: mysql-test/t/rowid_order_bdb.test -> BitKeeper/deleted/.del-rowid_order_bdb.test
BitKeeper/deleted/.del-sql_manager.h:
  Rename: sql/sql_manager.h -> BitKeeper/deleted/.del-sql_manager.h
libmysqld/Makefile.am:
  Removed bdb from the engine
mysql-test/extra/binlog_tests/binlog.test:
  Removed bdb support
mysql-test/r/binlog_stm_binlog.result:
  Updated results
mysql-test/r/ctype_utf8.result:
  Removed bdb support
mysql-test/t/ctype_utf8.test:
  Removed bdb support
sql/CMakeLists.txt:
  Removed file for Windows build
sql/Makefile.am:
  Removed unneeded include file.
sql/sql_manager.cc:
  Removed include file.
2006-08-10 18:29:25 -07:00

132 lines
3.3 KiB
C++

/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult 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; either version 2 of the License, or
(at your option) any later version.
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 */
/*
* sql_manager.cc
* This thread manages various maintenance tasks.
*
* o Flushing the tables every flush_time seconds.
* o Berkeley DB: removing unneeded log files.
*/
#include "mysql_priv.h"
ulong volatile manager_status;
bool volatile manager_thread_in_use;
pthread_t manager_thread;
pthread_mutex_t LOCK_manager;
pthread_cond_t COND_manager;
struct handler_cb {
struct handler_cb *next;
void (*action)(void);
};
static struct handler_cb * volatile cb_list;
bool mysql_manager_submit(void (*action)())
{
bool result= FALSE;
struct handler_cb * volatile *cb;
pthread_mutex_lock(&LOCK_manager);
cb= &cb_list;
while (*cb && (*cb)->action != action)
cb= &(*cb)->next;
if (!*cb)
{
*cb= (struct handler_cb *)my_malloc(sizeof(struct handler_cb), MYF(MY_WME));
if (!*cb)
result= TRUE;
else
{
(*cb)->next= NULL;
(*cb)->action= action;
}
}
pthread_mutex_unlock(&LOCK_manager);
return result;
}
pthread_handler_t handle_manager(void *arg __attribute__((unused)))
{
int error = 0;
ulong status;
struct timespec abstime;
bool reset_flush_time = TRUE;
struct handler_cb *cb= NULL;
my_thread_init();
DBUG_ENTER("handle_manager");
pthread_detach_this_thread();
manager_thread = pthread_self();
manager_status = 0;
manager_thread_in_use = 1;
for (;;)
{
pthread_mutex_lock(&LOCK_manager);
/* XXX: This will need to be made more general to handle different
* polling needs. */
if (flush_time)
{
if (reset_flush_time)
{
set_timespec(abstime, flush_time);
reset_flush_time = FALSE;
}
while (!manager_status && (!error || error == EINTR) && !abort_loop)
error= pthread_cond_timedwait(&COND_manager, &LOCK_manager, &abstime);
}
else
{
while (!manager_status && (!error || error == EINTR) && !abort_loop)
error= pthread_cond_wait(&COND_manager, &LOCK_manager);
}
status = manager_status;
manager_status = 0;
if (cb == NULL)
{
cb= cb_list;
cb_list= NULL;
}
pthread_mutex_unlock(&LOCK_manager);
if (abort_loop)
break;
if (error == ETIMEDOUT || error == ETIME)
{
flush_tables();
error = 0;
reset_flush_time = TRUE;
}
while (cb)
{
struct handler_cb *next= cb->next;
cb->action();
my_free((gptr)cb, MYF(0));
cb= next;
}
if (status)
DBUG_PRINT("error", ("manager did not handle something: %lx", status));
}
manager_thread_in_use = 0;
my_thread_end();
DBUG_RETURN(NULL);
}