8 Star 1 Fork 8

src-anolis-os/rasdaemon

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
1043-trigger-parse-only-once-TRIGGER_DIR-env-variable.patch 3.68 KB
一键复制 编辑 原始数据 按行查看 历史
winterddd 提交于 2024-12-25 17:32 +08:00 . [Feature]anolis: rasdaemon: rasdaemon 0.6.7-16
From 092e251ac3a880284f72c45a42990734e33b4df1 Mon Sep 17 00:00:00 2001
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Date: Mon, 15 Jul 2024 13:40:37 +0200
Subject: [PATCH 43/85] trigger: parse only once TRIGGER_DIR env variable
Instead of parsing TRIGGER_DIR every time a new event happens,
store the trigger full path, simplifying the logic and avoiding
memory leaks.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
ras-mc-handler.c | 13 ++++++-------
trigger.c | 23 +++++++++--------------
trigger.h | 2 +-
3 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/ras-mc-handler.c b/ras-mc-handler.c
index 203c5af..b62dfb6 100644
--- a/ras-mc-handler.c
+++ b/ras-mc-handler.c
@@ -39,7 +39,9 @@ void mc_event_trigger_setup(void)
trigger = getenv("MC_CE_TRIGGER");
if (trigger && strcmp(trigger, "")) {
- if (trigger_check(trigger) < 0) {
+ mc_ce_trigger = trigger_check(trigger);
+
+ if (!mc_ce_trigger) {
log(ALL, LOG_ERR,
"Cannot access mc_event ce trigger `%s`\n",
trigger);
@@ -47,13 +49,14 @@ void mc_event_trigger_setup(void)
log(ALL, LOG_INFO,
"Setup mc_event ce trigger `%s`\n",
trigger);
- mc_ce_trigger = trigger;
}
}
trigger = getenv("MC_UE_TRIGGER");
if (trigger && strcmp(trigger, "")) {
- if (trigger_check(trigger) < 0) {
+ mc_ue_trigger = trigger_check(trigger);
+
+ if (!mc_ue_trigger) {
log(ALL, LOG_ERR,
"Cannot access mc_event ue trigger `%s`\n",
trigger);
@@ -61,7 +64,6 @@ void mc_event_trigger_setup(void)
log(ALL, LOG_INFO,
"Setup mc_event ue trigger `%s`\n",
trigger);
- mc_ue_trigger = trigger;
}
}
}
@@ -72,9 +74,6 @@ static void run_mc_trigger(struct ras_mc_event *ev, const char *mc_trigger)
int ei = 0;
int i;
- if (!strcmp(mc_trigger, ""))
- return;
-
if (asprintf(&env[ei++], "PATH=%s", getenv("PATH") ?: "/sbin:/usr/sbin:/bin:/usr/bin") < 0)
goto free;
if (asprintf(&env[ei++], "TIMESTAMP=%s", ev->timestamp) < 0)
diff --git a/trigger.c b/trigger.c
index 0d91e05..0ee1a5e 100644
--- a/trigger.c
+++ b/trigger.c
@@ -9,15 +9,10 @@
void run_trigger(const char *trigger, char *argv[], char **env, const char *reporter)
{
pid_t child;
- char *path;
int status;
- char *trigger_dir = getenv("TRIGGER_DIR");
log(SYSLOG, LOG_INFO, "Running trigger `%s' (reporter: %s)\n", trigger, reporter);
- if (asprintf(&path, "%s/%s", trigger_dir, trigger) < 0)
- return;
-
child = fork();
if (child < 0) {
log(SYSLOG, LOG_ERR, "Cannot create process for trigger");
@@ -25,7 +20,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char *repo
}
if (child == 0) {
- execve(path, argv, env);
+ execve(trigger, argv, env);
_exit(127);
} else {
waitpid(child, &status, 0);
@@ -39,7 +34,7 @@ void run_trigger(const char *trigger, char *argv[], char **env, const char *repo
}
}
-int trigger_check(const char *s)
+const char *trigger_check(const char *s)
{
char *name;
int rc;
@@ -47,14 +42,14 @@ int trigger_check(const char *s)
if (trigger_dir) {
if (asprintf(&name, "%s/%s", trigger_dir, s) < 0)
- return -1;
- } else
- name = s;
+ return NULL;
+ s = name;
+ }
- rc = access(name, R_OK|X_OK);
+ rc = access(s, R_OK|X_OK);
- if (trigger_dir)
- free(name);
+ if (!rc)
+ return(s);
- return rc;
+ return NULL;
}
diff --git a/trigger.h b/trigger.h
index ccd1a9b..aea29b5 100644
--- a/trigger.h
+++ b/trigger.h
@@ -6,7 +6,7 @@ struct event_trigger {
void (*setup)(void);
};
-int trigger_check(const char *s);
+const char *trigger_check(const char *s);
void run_trigger(const char *trigger, char *argv[], char **env, const char* reporter);
#endif
--
2.33.1
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-anolis-os/rasdaemon.git
git@gitee.com:src-anolis-os/rasdaemon.git
src-anolis-os
rasdaemon
rasdaemon
a8

搜索帮助

371d5123 14472233 46e8bd33 14472233