When log resilient mode is enabled and timeout of saflogger is
configured larger than logResilienceTimeout , the saflogger will
be blocked forever until the underlying filesystem is responsive.
The fix is adding a timer to avoid command loop too long.
---
 src/log/tools/saf_logger.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/log/tools/saf_logger.c b/src/log/tools/saf_logger.c
index e9f7e9b36..7a7e192b2 100644
--- a/src/log/tools/saf_logger.c
+++ b/src/log/tools/saf_logger.c
@@ -148,6 +148,7 @@ static SaAisErrorT write_log_record(SaLogHandleT logHandle,
        int i = 0;
        struct pollfd fds[1];
        int ret;
+       int64_t start_time_us = get_current_SaTime() / 1000;
        unsigned int wait_time = 0;
 
        i++;
@@ -206,6 +207,7 @@ poll_retry:
                return SA_AIS_ERR_BAD_OPERATION;
        }
 
+       wait_time = (get_current_SaTime() / 1000) - start_time_us;
        if (cb_error == SA_AIS_ERR_TRY_AGAIN &&
            wait_time < g_timeout*ONE_SECOND_TO_NS) {
                usleep(HUNDRED_MS);
-- 
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to