Merge pull request #46 from TheBlueMatt/main
[ldk-c-bindings] / ldk-net / ldk_net.c
index 18279541e0a88014f8b7621b6855e754be598f1b..f404ddd973d107477968011893a439e5c5c8e997 100644 (file)
@@ -111,10 +111,9 @@ static uintptr_t sock_send_data(void* desc, struct LDKu8slice data, bool resume_
                for (int i = 0; i < descriptor->handler->sockcount; i++) {
                        if (descriptor->handler->pollfds[i].fd == descriptor->fd) {
                                if (pause_read) {
-                                       descriptor->handler->pollfds[i].events &= POLLIN;
-                                       descriptor->handler->pollfds[i].events |= POLLOUT;
+                                       descriptor->handler->pollfds[i].events = POLLOUT;
                                } else {
-                                       descriptor->handler->pollfds[i].events |= POLLIN;
+                                       descriptor->handler->pollfds[i].events = POLLIN;
                                }
                                break;
                        }
@@ -142,12 +141,12 @@ static uint64_t sock_hash(const void* desc) {
        const struct Descriptor *descriptor = (const struct Descriptor*)desc;
        return (uint64_t)descriptor->fd;
 }
-static void* sock_clone(const void* desc) {
-       const struct Descriptor *descriptor = (const struct Descriptor*)desc;
+static void sock_cloned(LDKSocketDescriptor *NONNULL_PTR ldk_desc) {
+       const struct Descriptor *descriptor = (const struct Descriptor*)ldk_desc->this_arg;
        struct Descriptor *new_desc = malloc(sizeof(struct Descriptor));
        new_desc->handler = descriptor->handler;
        new_desc->fd = descriptor->fd;
-       return new_desc;
+       ldk_desc->this_arg = (void*) new_desc;
 }
 static void sock_free(void* desc) {
        free(desc);
@@ -163,7 +162,7 @@ static inline LDKSocketDescriptor get_descriptor(struct SocketHandler *handler,
                .disconnect_socket = sock_disconnect,
                .eq = sock_eq,
                .hash = sock_hash,
-               .clone = sock_clone,
+               .cloned = sock_cloned,
                .free = sock_free,
        };
        return ret;
@@ -243,8 +242,7 @@ static void *sock_thread_fn(void* arg) {
                                                                        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 &= POLLIN;
-                                                                       handler->pollfds[i - 1].events |= POLLOUT;
+                                                                       handler->pollfds[i - 1].events = POLLOUT;
                                                                        lockres = pthread_mutex_unlock(&handler->sockets_mutex);
                                                                        assert(lockres == 0);
                                                                }