From 45005694dadc3d33c51ba7be638d7e62987b7db8 Mon Sep 17 00:00:00 2001 From: chenbushan Date: Sun, 24 Mar 2024 10:22:48 +0800 Subject: [PATCH 1/2] bugfix : avoid uevent infinite loop when netlink failed causing high cpu load Signed-off-by: chenbushan Change-Id: I168bcd025a44549474e68683716939ae16d81ee9 --- adapter/uhdf2/manager/src/devmgr_uevent.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/adapter/uhdf2/manager/src/devmgr_uevent.c b/adapter/uhdf2/manager/src/devmgr_uevent.c index 461dbcf45..beae5ab0d 100644 --- a/adapter/uhdf2/manager/src/devmgr_uevent.c +++ b/adapter/uhdf2/manager/src/devmgr_uevent.c @@ -527,15 +527,18 @@ static int32_t DevMgrUeventThread(void *arg) OsalMSleep(DEVMGR_UEVENT_WAIT_TIME); continue; } - if (((uint32_t)fd.revents & POLLIN) == POLLIN) { + if (((uint32_t)fd.revents & (POLLIN | POLLERR)) != 0) { + int back_errno = errno; msgLen = DevMgrReadUeventMessage(sfd, msg, DEVMGR_UEVENT_MSG_SIZE); + if (((uint32_t)fd.revents & POLLERR) != 0) { + HDF_LOGE("%{public}s poll error", __func__); + } if (msgLen <= 0) { + HDF_LOGE("%{public}s recv errno: %{public}d", __func__, back_errno); continue; } DevMgrParseUevent(msg, msgLen); (void)memset_s(&msg, sizeof(msg), 0, sizeof(msg)); - } else if (((uint32_t)fd.revents & POLLERR) == POLLERR) { - HDF_LOGE("%{public}s poll error", __func__); } } -- Gitee From d973068089c638beb191657c2d1057ea9ddf9e01 Mon Sep 17 00:00:00 2001 From: chenbushan Date: Tue, 26 Mar 2024 03:43:35 +0000 Subject: [PATCH 2/2] update adapter/uhdf2/manager/src/devmgr_uevent.c. Signed-off-by: chenbushan --- adapter/uhdf2/manager/src/devmgr_uevent.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adapter/uhdf2/manager/src/devmgr_uevent.c b/adapter/uhdf2/manager/src/devmgr_uevent.c index beae5ab0d..93f700025 100644 --- a/adapter/uhdf2/manager/src/devmgr_uevent.c +++ b/adapter/uhdf2/manager/src/devmgr_uevent.c @@ -528,13 +528,13 @@ static int32_t DevMgrUeventThread(void *arg) continue; } if (((uint32_t)fd.revents & (POLLIN | POLLERR)) != 0) { - int back_errno = errno; + int backErrno = errno; msgLen = DevMgrReadUeventMessage(sfd, msg, DEVMGR_UEVENT_MSG_SIZE); if (((uint32_t)fd.revents & POLLERR) != 0) { HDF_LOGE("%{public}s poll error", __func__); } if (msgLen <= 0) { - HDF_LOGE("%{public}s recv errno: %{public}d", __func__, back_errno); + HDF_LOGE("%{public}s recv errno: %{public}d", __func__, backErrno); continue; } DevMgrParseUevent(msg, msgLen); -- Gitee