From 624efd60495403743fc251b7d689d920841e44c8 Mon Sep 17 00:00:00 2001 From: caixiaomeng Date: Fri, 11 Oct 2024 17:54:04 +0800 Subject: [PATCH] fix xalarm_upgrade not return val and fail when thread stopped --- src/libso/xalarm/register_xalarm.c | 11 ++++++++++- src/python/xalarm/register_xalarm.py | 10 +++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/libso/xalarm/register_xalarm.c b/src/libso/xalarm/register_xalarm.c index 952a28b..6768242 100644 --- a/src/libso/xalarm/register_xalarm.c +++ b/src/libso/xalarm/register_xalarm.c @@ -156,7 +156,11 @@ static void *alarm_recv(void *arg) continue; } printf("recv error len:%d errno:%d\n", recvlen, errno); - } + } else if (recvlen == 0) { + printf("connection closed by xalarmd, maybe connections reach max num or service stopped.\n"); + g_register_info.thread_should_stop = 1; + break; + } } return NULL; } @@ -211,6 +215,11 @@ bool xalarm_Upgrade(struct alarm_subscription_info id_filter, int client_id) printf("%s: invalid args\n", __func__); return false; } + + if (g_register_info.thread_should_stop) { + printf("%s: upgrade failed, alarm thread has stopped\n", __func__); + return false; + } set_alarm_id(id_filter); return true; diff --git a/src/python/xalarm/register_xalarm.py b/src/python/xalarm/register_xalarm.py index 39623bd..2a6dabf 100644 --- a/src/python/xalarm/register_xalarm.py +++ b/src/python/xalarm/register_xalarm.py @@ -148,15 +148,19 @@ def xalarm_unregister(clientId: int) -> None: ALARM_REGISTER_INFO = None -def xalarm_upgrade(clientId: int, id_filter: list) -> None: +def xalarm_upgrade(id_filter: list, clientId: int) -> bool: global ALARM_REGISTER_INFO if clientId < 0: sys.stderr.write("xalarm_upgrade: invalid client\n") - return + return False if ALARM_REGISTER_INFO is None: sys.stderr.write("xalarm_upgrade: alarm has not registered\n") - return + return False + if ALARM_REGISTER_INFO.thread_should_stop: + sys.stderr.write("xalarm_upgrade: upgrade failed, alarm thread has stopped\n") + return False ALARM_REGISTER_INFO.id_filter = id_filter + return True def xalarm_getid(alarm_info: Xalarm) -> int: -- 2.27.0