]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/defer: fix linter warnings
authorLukáš Ondráček <lukas.ondracek@nic.cz>
Mon, 24 Feb 2025 13:40:53 +0000 (14:40 +0100)
committerLukáš Ondráček <lukas.ondracek@nic.cz>
Wed, 5 Mar 2025 14:51:41 +0000 (15:51 +0100)
daemon/defer.c
daemon/defer.h
daemon/worker.c

index 13dc31b504cfc40c0163ae5a6ec643d9892cdda7..de5367d0e0e57b8817f914e1d86e04adda30b533 100644 (file)
@@ -897,7 +897,10 @@ int defer_init(const char *mmap_file, uint32_t log_period, uint32_t hard_timeout
        for (size_t i = 0; i < QUEUES_CNT; i++)
                queue_init(queues[i]);
 
-       signal(SIGALRM, defer_alarm);
+       if (signal(SIGALRM, defer_alarm) == SIG_ERR) {
+               kr_log_error(DEFER, "Cannot set SIGALRM handler, interrupting of too long work on a single request will not work: %s\n",
+                       strerror(errno));
+       }
        defer_alarm(0);
 
        return 0;
index 09c5f03de98d781508448d00d963fb71d7617784..e09b87fdf7d96018e99df98916a81f1c1075f7b5 100644 (file)
@@ -127,7 +127,10 @@ static inline bool defer_sample_is_accounting(void)
 /// Start accounting work; optionally save state of current accounting.
 /// Current state can be saved only after having an address assigned.
 static inline void defer_sample_start(defer_sample_state_t *prev_state_out) {
-       if (!defer) return;
+       if (!defer) {
+               if (prev_state_out) *prev_state_out = (defer_sample_state_t){ 0 }; // just to meet undefined-value check of linter, but never used
+               return;
+       }
        uint64_t stamp = defer_get_stamp();
 
        // suspend
index 07480b24ca6f5e133243971bcada295b8351fe6e..83e3434f9215d85392c74e79ea71d09069bc6041 100644 (file)
@@ -2024,7 +2024,8 @@ static enum protolayer_event_cb_result pl_dns_stream_disconnected(
                return PROTOLAYER_EVENT_PROPAGATE;
 
        defer_sample_state_t defer_prev_sample_state;
-       if (session->outgoing)
+       const bool use_recursive_defer_sampling = session->outgoing; // make linter warning silent
+       if (use_recursive_defer_sampling)
                defer_sample_start(&defer_prev_sample_state);
 
        while (!session2_waitinglist_is_empty(session)) {
@@ -2043,7 +2044,7 @@ static enum protolayer_event_cb_result pl_dns_stream_disconnected(
                                qry->flags.TCP = false;
                        }
                        qr_task_step(task, NULL, NULL);
-                       defer_sample_restart();
+                       defer_sample_restart();  // use_recursive_defer_sampling == true
                } else {
                        kr_assert(task->ctx->source.session == session);
                        task->ctx->source.session = NULL;
@@ -2068,7 +2069,7 @@ static enum protolayer_event_cb_result pl_dns_stream_disconnected(
                worker_task_unref(task);
        }
 
-       if (session->outgoing)
+       if (use_recursive_defer_sampling)
                defer_sample_stop(&defer_prev_sample_state, true);
 
        return PROTOLAYER_EVENT_PROPAGATE;