Commit f3a3399e authored by tomas@poseidon.(none)'s avatar tomas@poseidon.(none)

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1

into poseidon.(none):/home/tomas/mysql-4.1
parents 71a4f92c 70bca251
......@@ -41,7 +41,9 @@
extern EventLogger g_eventLogger;
void catchsigs(bool ignore); // for process signal handling
extern "C" void handler(int signo); // for process signal handling
extern "C" void handler_shutdown(int signum); // for process signal handling
extern "C" void handler_error(int signum); // for process signal handling
// Shows system information
void systemInfo(const Configuration & conf,
......@@ -248,74 +250,91 @@ systemInfo(const Configuration & config, const LogLevel & logLevel){
}
static void
handler_register(int signum, sighandler_t handler, bool ignore)
{
if (ignore) {
if(signum != SIGCHLD)
signal(signum, SIG_IGN);
} else
signal(signum, handler);
}
void
catchsigs(bool ignore){
#if ! defined NDB_SOFTOSE && !defined NDB_OSE
#if defined SIGRTMIN
#define MAX_SIG_CATCH SIGRTMIN
#elif defined NSIG
#define MAX_SIG_CATCH NSIG
#else
#error "neither SIGRTMIN or NSIG is defined on this platform, please report bug at bugs.mysql.com"
static const int signals_shutdown[] = {
#ifdef SIGBREAK
SIGBREAK,
#endif
// Makes the main process catch process signals, eg installs a
// handler named "handler". "handler" will then be called is instead
// of the defualt process signal handler)
if(ignore){
for(int i = 1; i < MAX_SIG_CATCH; i++){
if(i != SIGCHLD)
signal(i, SIG_IGN);
}
} else {
for(int i = 1; i < MAX_SIG_CATCH; i++){
signal(i, handler);
}
}
SIGHUP,
SIGINT,
#if defined SIGPWR
SIGPWR,
#elif defined SIGINFO
SIGINFO,
#endif
}
extern "C"
void
handler(int sig){
switch(sig){
case SIGHUP: /* 1 - Hang up */
case SIGINT: /* 2 - Interrupt */
case SIGQUIT: /* 3 - Quit */
case SIGTERM: /* 15 - Terminate */
#ifdef SIGPWR
case SIGPWR: /* 19 - Power fail */
SIGQUIT,
SIGTERM,
#ifdef SIGTSTP
SIGTSTP,
#endif
SIGTTIN,
SIGTTOU
};
static const int signals_error[] = {
SIGABRT,
SIGALRM,
#ifdef SIGBUS
SIGBUS,
#endif
SIGCHLD,
SIGFPE,
SIGILL,
#ifdef SIGIO
SIGIO,
#endif
#ifdef SIGPOLL
case SIGPOLL: /* 22 */
SIGPOLL,
#endif
case SIGSTOP: /* 23 */
case SIGTSTP: /* 24 */
case SIGTTIN: /* 26 */
case SIGTTOU: /* 27 */
globalData.theRestartFlag = perform_stop;
break;
#ifdef SIGWINCH
case SIGWINCH:
SIGSEGV,
#ifdef SIGTRAP
SIGTRAP
#endif
case SIGPIPE:
/**
* Can happen in TCP Transporter
*
* Just ignore
*/
break;
default:
// restart the system
char errorData[40];
snprintf(errorData, 40, "Signal %d received", sig);
ERROR_SET(fatal, 0, errorData, __FILE__);
break;
}
};
#endif
static const int signals_ignore[] = {
SIGPIPE
};
for(size_t i = 0; i < sizeof(signals_shutdown)/sizeof(signals_shutdown[0]); i++)
handler_register(signals_shutdown[i], handler_shutdown, ignore);
for(size_t i = 0; i < sizeof(signals_error)/sizeof(signals_error[0]); i++)
handler_register(signals_error[i], handler_error, ignore);
for(size_t i = 0; i < sizeof(signals_ignore)/sizeof(signals_ignore[0]); i++)
handler_register(signals_ignore[i], SIG_IGN, ignore);
}
extern "C"
void
handler_shutdown(int signum){
g_eventLogger.info("Received signal %d. Performing stop.", signum);
globalData.theRestartFlag = perform_stop;
}
extern "C"
void
handler_error(int signum){
g_eventLogger.info("Received signal %d. Running error handler.", signum);
// restart the system
char errorData[40];
snprintf(errorData, 40, "Signal %d received", signum);
ERROR_SET(fatal, 0, errorData, __FILE__);
}
......
......@@ -2835,7 +2835,7 @@ MgmtSrvr::setDbParameter(int node, int param, const char * value,
p_type++;
if(iter.get(param, &val_64) == 0){
val_64 = atoll(value);
val_64 = strtoll(value, 0, 10);
break;
}
p_type++;
......
......@@ -1529,4 +1529,4 @@ int main(int argc, const char** argv){
return testIndex.execute(argc, argv);
}
template class Vector<Attrib*>;
......@@ -1010,4 +1010,5 @@ int main(int argc, const char** argv){
return testNdbApi.execute(argc, argv);
}
template class Vector<Ndb*>;
template class Vector<NdbConnection*>;
......@@ -216,3 +216,5 @@ NDBT_TESTSUITE_END(testRestartGci);
int main(int argc, const char** argv){
return testRestartGci.execute(argc, argv);
}
template class Vector<SavedRecord>;
......@@ -1404,3 +1404,4 @@ int main(int argc, const char** argv){
return testScan.execute(argc, argv);
}
template class Vector<Attrib*>;
......@@ -988,3 +988,7 @@ setup_hosts(atrt_config& config){
}
template class Vector<const ParserRow<SimpleCpcClient::ParserDummy>*>;
template class Vector<SimpleCpcClient::Process>;
template class Vector<Vector<SimpleCpcClient::Process> >;
template class Vector<atrt_host>;
template class Vector<atrt_process>;
......@@ -796,3 +796,5 @@ HugoOperations::scanReadRecords(Ndb* pNdb, NdbScanOperation::LockMode lm,
return 0;
}
template class Vector<HugoOperations::RsPair>;
......@@ -348,3 +348,5 @@ Operate::evaluate(SimpleCpcClient* c, const SimpleCpcClient::Process & pp){
}
template class Vector<const ParserRow<SimpleCpcClient::ParserDummy>*>;
template class Vector<Expression*>;
template class Vector<SimpleCpcClient*>;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment