Skip to content

Commit b4a0ffe

Browse files
committed
Update ldk_net.c to new upstream API
1 parent f037862 commit b4a0ffe

File tree

1 file changed

+27
-29
lines changed

1 file changed

+27
-29
lines changed

ldk-net/ldk_net.c

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@ struct Descriptor {
9191
static uintptr_t sock_send_data(void* desc, struct LDKu8slice data, bool resume_read) {
9292
struct Descriptor *descriptor = (struct Descriptor*)desc;
9393
ssize_t write_count = send(descriptor->fd, data.data, data.datalen, MSG_NOSIGNAL);
94-
bool pause_read = false;
95-
if (write_count <= 0) {
94+
bool more_to_write = false;
95+
if (data.datalen > 0 && write_count <= 0) {
9696
if (errno == EAGAIN || errno == EWOULDBLOCK) {
97-
pause_read = true;
97+
more_to_write = true;
9898
write_count = 0;
9999
} else {
100100
shutdown(descriptor->fd, SHUT_RDWR);
@@ -103,23 +103,30 @@ static uintptr_t sock_send_data(void* desc, struct LDKu8slice data, bool resume_
103103
return 0;
104104
}
105105
} else if (write_count < data.datalen) {
106-
pause_read = true;
106+
more_to_write = true;
107107
}
108-
if (pause_read || resume_read) {
109-
int lockres = pthread_mutex_lock(&descriptor->handler->sockets_mutex);
110-
assert(lockres == 0);
111-
for (int i = 0; i < descriptor->handler->sockcount; i++) {
112-
if (descriptor->handler->pollfds[i].fd == descriptor->fd) {
113-
if (pause_read) {
114-
descriptor->handler->pollfds[i].events = POLLOUT;
115-
} else {
116-
descriptor->handler->pollfds[i].events = POLLIN;
117-
}
118-
break;
108+
109+
int lockres = pthread_mutex_lock(&descriptor->handler->sockets_mutex);
110+
assert(lockres == 0);
111+
bool events_changed = false;
112+
for (int i = 0; i < descriptor->handler->sockcount; i++) {
113+
if (descriptor->handler->pollfds[i].fd == descriptor->fd) {
114+
short events_desired = 0;
115+
if (resume_read) {
116+
events_desired |= POLLIN;
117+
}
118+
if (more_to_write) {
119+
events_desired |= POLLOUT;
119120
}
121+
events_changed = descriptor->handler->pollfds[i].events != events_desired;
122+
descriptor->handler->pollfds[i].events = events_desired;
123+
break;
120124
}
121-
lockres = pthread_mutex_unlock(&descriptor->handler->sockets_mutex);
122-
assert(lockres == 0);
125+
}
126+
lockres = pthread_mutex_unlock(&descriptor->handler->sockets_mutex);
127+
assert(lockres == 0);
128+
129+
if (events_changed) {
123130
uint8_t dummy = 0;
124131
write(descriptor->handler->pipefds[1], &dummy, 1);
125132
}
@@ -261,20 +268,11 @@ static void *sock_thread_fn(void* arg) {
261268
.data = readbuf,
262269
.datalen = readlen,
263270
};
264-
LDKCResult_boolPeerHandleErrorZ res = PeerManager_read_event(&handler->ldk_peer_manager, &descriptor, data);
265-
if (res.result_ok) {
266-
if (*res.contents.result) {
267-
lockres = pthread_mutex_lock(&handler->sockets_mutex);
268-
assert(lockres == 0);
269-
assert(handler->pollfds[i].fd == pollfds[i].fd); // Only we change fd order!
270-
handler->pollfds[i].events = POLLOUT;
271-
lockres = pthread_mutex_unlock(&handler->sockets_mutex);
272-
assert(lockres == 0);
273-
}
274-
} else {
271+
LDKCResult_NonePeerHandleErrorZ res = PeerManager_read_event(&handler->ldk_peer_manager, &descriptor, data);
272+
if (!res.result_ok) {
275273
close_socks[close_socks_count++] = i;
276274
}
277-
CResult_boolPeerHandleErrorZ_free(res);
275+
CResult_NonePeerHandleErrorZ_free(res);
278276
}
279277
}
280278
if (pollfds[i].revents & POLLOUT) {

0 commit comments

Comments
 (0)