[ldk-net] Correct pollfds array offset after reads
authorMatt Corallo <git@bluematt.me>
Fri, 29 Apr 2022 19:30:05 +0000 (19:30 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 29 Apr 2022 19:30:05 +0000 (19:30 +0000)
Previously, we were copying the pollfds array at an offset of one
into the handler thread's stack. However, when it was changed to
copying at a 0 offset (adding the pipe read fd at the end instead
of beginning), the disable-read handling code was not updated.

This leads to an assertion failure at runtime if LDK decides we
need to stop reading due to the outbound buffer of a peer being
full.

ldk-net/ldk_net.c

index 97521368fc7c94f20a14942a9f40d8fb0e1b6def..6e858b0ea68649601e9f0b66b343ce97e45d6871 100644 (file)
@@ -266,8 +266,8 @@ static void *sock_thread_fn(void* arg) {
                                                                if (*res.contents.result) {
                                                                        lockres = pthread_mutex_lock(&handler->sockets_mutex);
                                                                        assert(lockres == 0);
-                                                                       assert(handler->pollfds[i - 1].fd == pollfds[i].fd); // Only we change fd order!
-                                                                       handler->pollfds[i - 1].events = POLLOUT;
+                                                                       assert(handler->pollfds[i].fd == pollfds[i].fd); // Only we change fd order!
+                                                                       handler->pollfds[i].events = POLLOUT;
                                                                        lockres = pthread_mutex_unlock(&handler->sockets_mutex);
                                                                        assert(lockres == 0);
                                                                }