]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/session2: avoid incorrectly generated errors docs-develop-uv-t-p5pt2q/deployments/5212
authorVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 25 Sep 2024 08:39:43 +0000 (10:39 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 25 Sep 2024 08:39:43 +0000 (10:39 +0200)
The _try_ functions additionally return positive values on success,
and the code around didn't deal with that.

So far there's no evidence that this caused any issues beyond debug-logs:
  [prlayr] ... iteration of group ... ended with status 'Unknown error ...

daemon/session2.c

index 0be121fae606e33d55b14473b28700f53f4623a1..91aeb82953360f0187f7ea854e5bb5e3ecd497fc 100644 (file)
@@ -1449,6 +1449,8 @@ static int session2_transport_pushv(struct session2 *s,
                        } else {
                                int ret = uv_udp_try_send((uv_udp_t*)handle,
                                                (uv_buf_t *)iov, iovcnt, comm->comm_addr);
+                               if (ret > 0) // equals buffer size, only confuses us
+                                       ret = 0;
                                if (ret == UV_EAGAIN) {
                                        ret = kr_error(ENOBUFS);
                                        session2_event(s, PROTOLAYER_EVENT_OS_BUFFER_FULL, NULL);
@@ -1480,6 +1482,8 @@ static int session2_transport_pushv(struct session2 *s,
                                ret = kr_error(ENOBUFS);
                                session2_event(s, PROTOLAYER_EVENT_OS_BUFFER_FULL, NULL);
                        }
+                       else if (ret > 0) // iovec_sum was checked, let's not get confused anymore
+                               ret = 0;
 
                        if (false && ret == UV_EAGAIN) {
                                uv_write_t *req = malloc(sizeof(*req));