Description:reset uevnetd timeout and wait bootcomplete

Feature or Bugfix:Bugfix
Binary Source: No

Signed-off-by: cat <chenjinxiang3@huawei.com>
This commit is contained in:
cat 2024-04-29 09:41:15 +00:00
parent 638fe6caf6
commit 56ca23636d
3 changed files with 29 additions and 3 deletions

View File

@ -46,6 +46,7 @@ if (defined(ohos_lite)) {
deps = service_ueventd_deps
deps += [ "//base/hiviewdfx/hilog_lite/frameworks/featured:hilog_shared" ]
deps += [ "//base/startup/init/interfaces/innerkits:libbegetutil" ]
}
copy("ueventd.config") {
sources = [ "etc/ueventd_l1.config" ]
@ -117,6 +118,7 @@ if (defined(ohos_lite)) {
external_deps += [ "bounds_checking_function:libsec_static" ]
cflags = []
deps += [ "//base/startup/init/services/param/base:param_base" ]
deps += [ "//base/startup/init/interfaces/innerkits:libbegetutil" ]
if (build_selinux) {
external_deps += [ "selinux_adapter:librestorecon" ]
cflags += [ "-DWITH_SELINUX" ]

View File

@ -66,7 +66,7 @@ typedef enum SUBYSTEM {
} SUBSYSTEMTYPE;
#define CMDLINE_VALUE_LEN_MAX 512
#define UEVENTD_POLL_TIME 30000
#define UEVENTD_POLL_TIME (5 * 60 * 1000)
#define UEVENTD_FLAG "/dev/.ueventd_trigger_done"
extern char bootDevice[CMDLINE_VALUE_LEN_MAX];

View File

@ -23,6 +23,27 @@
#define INIT_LOG_TAG "ueventd"
#include "init_log.h"
#include "init_socket.h"
#include "parameter.h"
static bool IsComplete()
{
static bool complete = false;
if (complete) {
return true;
}
char enable[8] = {0};
int ret = GetParameter("bootevent.boot.completed", "", enable, sizeof(enable));
if (ret != 0) {
INIT_LOGE("Failed to get param value");
return false;
}
if (strcmp(enable, "true") == 0) {
INIT_LOGI("boot completed");
complete = true;
return true;
}
return false;
}
static void PollUeventdSocketTimeout(int ueventSockFd, bool ondemand)
{
@ -36,8 +57,11 @@ static void PollUeventdSocketTimeout(int ueventSockFd, bool ondemand)
pfd.revents = 0;
ret = poll(&pfd, 1, timeout);
if (ret == 0) {
INIT_LOGI("poll ueventd socket timeout, ueventd exit");
return;
if (IsComplete()) {
INIT_LOGI("poll ueventd socket timeout, ueventd exit");
return;
}
INIT_LOGI("poll ueventd socket timeout, but init not complete");
} else if (ret < 0) {
INIT_LOGE("Failed to poll ueventd socket!");
return;