提交 246336cc 编写于 作者: D dhy308

Fix review issues

Issue: I6AEEI
Test: Build & Boot Devices
Signed-off-by: Ndhy308 <tony.gan@huawei.com>
上级 82b1ba43
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
#include <locale.h> #include <locale.h>
#include <pthread.h> #include <pthread.h>
#include <errno.h> #include <errno.h>
#include <stdio.h>
#include <threads.h> #include <threads.h>
#include <hilog_adapter.h>
extern int __libc_sigaction(int sig, const struct sigaction *restrict sa, extern int __libc_sigaction(int sig, const struct sigaction *restrict sa,
struct sigaction *restrict old); struct sigaction *restrict old);
...@@ -26,18 +26,17 @@ extern int __libc_sigaction(int sig, const struct sigaction *restrict sa, ...@@ -26,18 +26,17 @@ extern int __libc_sigaction(int sig, const struct sigaction *restrict sa,
#define SIG_CHAIN_KEY_VALUE_1 1 #define SIG_CHAIN_KEY_VALUE_1 1
#define SIGNAL_CHAIN_SPECIAL_ACTION_MAX 2 #define SIGNAL_CHAIN_SPECIAL_ACTION_MAX 2
#ifdef SIGCHAIN_DEBUG #define SIGCHAIN_LOG_DOMAIN 0xD003F00
#ifndef SIGCHAIN_PRINT_DEBUG #define SIGCHAIN_LOG_TAG "SIGCHAIN"
#define SIGCHAIN_PRINT_DEBUG(fmt, ...) printf("SIGCHAIN D " fmt "\n", ##__VA_ARGS__)
#endif #if (defined(OHOS_ENABLE_PARAMETER) || defined(ENABLE_MUSL_LOG))
#define SIGCHAIN_PRINT_ERROR(...) ((void)HiLogAdapterPrint(LOG_CORE, LOG_ERROR, SIGCHAIN_LOG_DOMAIN, SIGCHAIN_LOG_TAG, __VA_ARGS__))
#define SIGCHAIN_PRINT_INFO(...) ((void)HiLogAdapterPrint(LOG_CORE, LOG_INFO, SIGCHAIN_LOG_DOMAIN, SIGCHAIN_LOG_TAG, __VA_ARGS__))
#define SIGCHAIN_PRINT_DEBUG(...) ((void)HiLogAdapterPrint(LOG_CORE, LOG_DEBUG, SIGCHAIN_LOG_DOMAIN, SIGCHAIN_LOG_TAG, __VA_ARGS__))
#else #else
#define SIGCHAIN_PRINT_DEBUG(fmt, ...) #define SIGCHAIN_PRINT_ERROR(...)
#endif #define SIGCHAIN_PRINT_INFO(...)
#ifndef SIGCHAIN_PRINT_INFO #define SIGCHAIN_PRINT_DEBUG(...)
#define SIGCHAIN_PRINT_INFO(fmt, ...) printf("SIGCHAIN I " fmt "\n", ##__VA_ARGS__)
#endif
#ifndef SIGCHAIN_PRINT_ERROR
#define SIGCHAIN_PRINT_ERROR(fmt, ...) printf("SIGCHAIN E " fmt "\n", ##__VA_ARGS__)
#endif #endif
struct sc_signal_chain { struct sc_signal_chain {
...@@ -57,11 +56,12 @@ static once_flag g_flag = ONCE_FLAG_INIT; ...@@ -57,11 +56,12 @@ static once_flag g_flag = ONCE_FLAG_INIT;
* @brief Create the thread key * @brief Create the thread key
* @retval void * @retval void
*/ */
void do_once(void) void create_pthread_key(void)
{ {
SIGCHAIN_PRINT_INFO("%{public}s create the thread key!", __func__);
int rc = pthread_key_create(&g_sigchain_key, NULL); int rc = pthread_key_create(&g_sigchain_key, NULL);
if (rc != 0) { if (rc != 0) {
SIGCHAIN_PRINT_ERROR("%s failed to create sigchain pthread key", SIGCHAIN_PRINT_ERROR("%{public}s failed to create sigchain pthread key, rc:%{public}d",
__func__, rc); __func__, rc);
} }
} }
...@@ -72,7 +72,7 @@ void do_once(void) ...@@ -72,7 +72,7 @@ void do_once(void)
* @retval int32_t, the value of the sigchain key. * @retval int32_t, the value of the sigchain key.
*/ */
static pthread_key_t get_handling_signal_key() { static pthread_key_t get_handling_signal_key() {
call_once(&g_flag, do_once); call_once(&g_flag, create_pthread_key);
return g_sigchain_key; return g_sigchain_key;
} }
...@@ -107,7 +107,6 @@ static void set_handling_signal(bool value) ...@@ -107,7 +107,6 @@ static void set_handling_signal(bool value)
*/ */
bool ismarked(int signo) bool ismarked(int signo)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo);
return sig_chains[signo - 1].marked; return sig_chains[signo - 1].marked;
} }
...@@ -120,11 +119,11 @@ bool ismarked(int signo) ...@@ -120,11 +119,11 @@ bool ismarked(int signo)
*/ */
static void signal_chain_handler(int signo, siginfo_t* siginfo, void* ucontext_raw) static void signal_chain_handler(int signo, siginfo_t* siginfo, void* ucontext_raw)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_DEBUG("%{public}s signo: %{public}d", __func__, signo);
/* Try to call the special handlers first. */ /* Try to call the special handlers first. */
/* If one of them crashes, we'll reenter this handler and pass that crash onto the user handler. */
if (!get_handling_signal()){ if (!get_handling_signal()){
int len = SIGNAL_CHAIN_SPECIAL_ACTION_MAX; for (int i = 0; i < SIGNAL_CHAIN_SPECIAL_ACTION_MAX; i++) {
for (int i = 0; i < len; i++) {
if (sig_chains[signo - 1].sca_special_actions[i].sca_sigaction == NULL) { if (sig_chains[signo - 1].sca_special_actions[i].sca_sigaction == NULL) {
break; break;
} }
...@@ -169,7 +168,7 @@ static void signal_chain_handler(int signo, siginfo_t* siginfo, void* ucontext_r ...@@ -169,7 +168,7 @@ static void signal_chain_handler(int signo, siginfo_t* siginfo, void* ucontext_r
if (sig_chains[signo - 1].sig_action.sa_handler == SIG_IGN) { if (sig_chains[signo - 1].sig_action.sa_handler == SIG_IGN) {
return; return;
} else if (sig_chains[signo - 1].sig_action.sa_handler == SIG_DFL) { } else if (sig_chains[signo - 1].sig_action.sa_handler == SIG_DFL) {
SIGCHAIN_PRINT_INFO("%s exiting due to SIG_DFL handler for signal: %d", SIGCHAIN_PRINT_INFO("%{public}s exiting due to SIG_DFL handler for signal: %{public}d",
__func__, signo); __func__, signo);
} else { } else {
sig_chains[signo - 1].sig_action.sa_handler(signo); sig_chains[signo - 1].sig_action.sa_handler(signo);
...@@ -186,7 +185,7 @@ static void signal_chain_handler(int signo, siginfo_t* siginfo, void* ucontext_r ...@@ -186,7 +185,7 @@ static void signal_chain_handler(int signo, siginfo_t* siginfo, void* ucontext_r
*/ */
void sigchain_register(int signo) void sigchain_register(int signo)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_INFO("%{public}s signo: %{public}d", __func__, signo);
struct sigaction signal_action = {}; struct sigaction signal_action = {};
sigfillset(&signal_action.sa_mask); sigfillset(&signal_action.sa_mask);
...@@ -200,9 +199,9 @@ void sigchain_register(int signo) ...@@ -200,9 +199,9 @@ void sigchain_register(int signo)
* @param[in] signo, the value of the signal. * @param[in] signo, the value of the signal.
* @retval void * @retval void
*/ */
void mark(int signo) void mark_signal_to_sigchain(int signo)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_INFO("%{public}s signo: %{public}d", __func__, signo);
if (!sig_chains[signo - 1].marked) { if (!sig_chains[signo - 1].marked) {
sigchain_register(signo); sigchain_register(signo);
sig_chains[signo - 1].marked = true; sig_chains[signo - 1].marked = true;
...@@ -217,7 +216,7 @@ void mark(int signo) ...@@ -217,7 +216,7 @@ void mark(int signo)
*/ */
void setaction(int signo, const struct sigaction *restrict new_sa) void setaction(int signo, const struct sigaction *restrict new_sa)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_DEBUG("%{public}s signo: %{public}d", __func__, signo);
sig_chains[signo - 1].sig_action = *new_sa; sig_chains[signo - 1].sig_action = *new_sa;
} }
...@@ -228,7 +227,7 @@ void setaction(int signo, const struct sigaction *restrict new_sa) ...@@ -228,7 +227,7 @@ void setaction(int signo, const struct sigaction *restrict new_sa)
*/ */
struct sigaction getaction(int signo) struct sigaction getaction(int signo)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_DEBUG("%{public}s signo: %{public}d", __func__, signo);
return sig_chains[signo - 1].sig_action; return sig_chains[signo - 1].sig_action;
} }
...@@ -240,11 +239,11 @@ struct sigaction getaction(int signo) ...@@ -240,11 +239,11 @@ struct sigaction getaction(int signo)
*/ */
void add_special_handler(int signo, struct signal_chain_action* sa) void add_special_handler(int signo, struct signal_chain_action* sa)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_INFO("%{public}s signo: %{public}d", __func__, signo);
int len = SIGNAL_CHAIN_SPECIAL_ACTION_MAX; for (int i = 0; i < SIGNAL_CHAIN_SPECIAL_ACTION_MAX; i++) {
for (int i = 0; i < len; i++) {
if (sig_chains[signo - 1].sca_special_actions[i].sca_sigaction == NULL) { if (sig_chains[signo - 1].sca_special_actions[i].sca_sigaction == NULL) {
sig_chains[signo - 1].sca_special_actions[i] = *sa; sig_chains[signo - 1].sca_special_actions[i] = *sa;
SIGCHAIN_PRINT_INFO("%{public}s signo %{public}d is registered with special handler!", __func__, signo);
return; return;
} }
} }
...@@ -258,7 +257,7 @@ void add_special_handler(int signo, struct signal_chain_action* sa) ...@@ -258,7 +257,7 @@ void add_special_handler(int signo, struct signal_chain_action* sa)
*/ */
void rm_special_handler(int signo, bool (*fn)(int, siginfo_t*, void*)) void rm_special_handler(int signo, bool (*fn)(int, siginfo_t*, void*))
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_INFO("%{public}s signo: %{public}d", __func__, signo);
int len = SIGNAL_CHAIN_SPECIAL_ACTION_MAX; int len = SIGNAL_CHAIN_SPECIAL_ACTION_MAX;
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
if (sig_chains[signo - 1].sca_special_actions[i].sca_sigaction == fn) { if (sig_chains[signo - 1].sca_special_actions[i].sca_sigaction == fn) {
...@@ -271,7 +270,7 @@ void rm_special_handler(int signo, bool (*fn)(int, siginfo_t*, void*)) ...@@ -271,7 +270,7 @@ void rm_special_handler(int signo, bool (*fn)(int, siginfo_t*, void*))
} }
} }
SIGCHAIN_PRINT_INFO("%s failed to find special handler!. signo: %d", SIGCHAIN_PRINT_INFO("%{public}s failed to find special handler!. signo: %{public}d",
__func__, signo); __func__, signo);
} }
...@@ -284,15 +283,15 @@ void rm_special_handler(int signo, bool (*fn)(int, siginfo_t*, void*)) ...@@ -284,15 +283,15 @@ void rm_special_handler(int signo, bool (*fn)(int, siginfo_t*, void*))
*/ */
void add_special_signal_handler(int signo, struct signal_chain_action* sa) void add_special_signal_handler(int signo, struct signal_chain_action* sa)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_INFO("%{public}s signo: %{public}d", __func__, signo);
if (signo <= 0 || signo >= _NSIG) { if (signo <= 0 || signo >= _NSIG) {
SIGCHAIN_PRINT_ERROR("%s Invalid signal %d", __func__, signo); SIGCHAIN_PRINT_ERROR("%{public}s Invalid signal %{public}d", __func__, signo);
return; return;
} }
// Set the special handler. // Set the special handler.
add_special_handler(signo, sa); add_special_handler(signo, sa);
mark(signo); mark_signal_to_sigchain(signo);
} }
/** /**
...@@ -303,9 +302,9 @@ void add_special_signal_handler(int signo, struct signal_chain_action* sa) ...@@ -303,9 +302,9 @@ void add_special_signal_handler(int signo, struct signal_chain_action* sa)
*/ */
void remove_special_signal_handler(int signo, bool (*fn)(int, siginfo_t*, void*)) void remove_special_signal_handler(int signo, bool (*fn)(int, siginfo_t*, void*))
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_INFO("%{public}s signo: %{public}d", __func__, signo);
if (signo <= 0 || signo >= _NSIG) { if (signo <= 0 || signo >= _NSIG) {
SIGCHAIN_PRINT_ERROR("%s Invalid signal %d", __func__, signo); SIGCHAIN_PRINT_ERROR("%{public}s Invalid signal %{public}d", __func__, signo);
return; return;
} }
// remove the special handler. // remove the special handler.
...@@ -322,9 +321,9 @@ void remove_special_signal_handler(int signo, bool (*fn)(int, siginfo_t*, void*) ...@@ -322,9 +321,9 @@ void remove_special_signal_handler(int signo, bool (*fn)(int, siginfo_t*, void*)
bool intercept_sigaction(int signo, const struct sigaction *restrict sa, bool intercept_sigaction(int signo, const struct sigaction *restrict sa,
struct sigaction *restrict old) struct sigaction *restrict old)
{ {
SIGCHAIN_PRINT_DEBUG("%s signo: %d", __func__, signo); SIGCHAIN_PRINT_DEBUG("%{public}s signo: %{public}d", __func__, signo);
if (signo <= 0 || signo >= _NSIG) { if (signo <= 0 || signo >= _NSIG) {
SIGCHAIN_PRINT_ERROR("%s Invalid signal %d", __func__, signo); SIGCHAIN_PRINT_ERROR("%{public}s Invalid signal %{public}d", __func__, signo);
return false; return false;
} }
...@@ -351,7 +350,7 @@ bool intercept_sigaction(int signo, const struct sigaction *restrict sa, ...@@ -351,7 +350,7 @@ bool intercept_sigaction(int signo, const struct sigaction *restrict sa,
*/ */
void intercept_sigprocmask(int how, sigset_t *restrict set) void intercept_sigprocmask(int how, sigset_t *restrict set)
{ {
SIGCHAIN_PRINT_DEBUG("%s how: %d", __func__, how); SIGCHAIN_PRINT_DEBUG("%{public}s how: %{public}d", __func__, how);
if (get_handling_signal()) { if (get_handling_signal()) {
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册