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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
e105c90f
Commit
e105c90f
authored
Aug 19, 2004
by
tomas@poseidon.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changed signal handler registration to fix some platform specific problems
parent
b9dbef8e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
76 additions
and
57 deletions
+76
-57
ndb/src/kernel/main.cpp
ndb/src/kernel/main.cpp
+76
-57
No files found.
ndb/src/kernel/main.cpp
View file @
e105c90f
...
...
@@ -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__
);
}
...
...
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