Skip to content

Commit 3a5d702

Browse files
committed
Resume last in error cases
1 parent da89f92 commit 3a5d702

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

libraries/llvm/io.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -358,42 +358,41 @@ typedef struct {
358358

359359
void c_tcp_listen_cb(uv_stream_t* server, int status) {
360360
tcp_listen_closure_t* listen_closure = (tcp_listen_closure_t*)server->data;
361+
Stack closure_stack = listen_closure->stack;
362+
struct Pos closure_handler = listen_closure->handler;
361363

362364
if (status < 0) {
363-
// TODO resume last
364-
erasePositive(listen_closure->handler);
365-
resume_Int(listen_closure->stack, status);
366-
free(listen_closure);
367365
server->data = NULL;
366+
free(listen_closure);
367+
erasePositive(closure_handler);
368+
resume_Int(closure_stack, status);
368369
return;
369370
}
370371

371372
uv_tcp_t* client = malloc(sizeof(uv_tcp_t));
372373
int result = uv_tcp_init(uv_default_loop(), client);
373374

374375
if (result < 0) {
375-
// TODO resume last
376376
free(client);
377-
erasePositive(listen_closure->handler);
378-
resume_Int(listen_closure->stack, result);
379-
free(listen_closure);
380377
server->data = NULL;
378+
free(listen_closure);
379+
erasePositive(closure_handler);
380+
resume_Int(closure_stack, result);
381381
return;
382382
}
383383

384384
result = uv_accept(server, (uv_stream_t*)client);
385385
if (result < 0) {
386-
// TODO resume last
387386
uv_close((uv_handle_t*)client, (uv_close_cb)free);
388-
erasePositive(listen_closure->handler);
389-
resume_Int(listen_closure->stack, result);
390-
free(listen_closure);
391387
server->data = NULL;
388+
free(listen_closure);
389+
erasePositive(closure_handler);
390+
resume_Int(closure_stack, result);
392391
return;
393392
}
394393

395-
sharePositive(listen_closure->handler);
396-
run_Int(listen_closure->handler, (int64_t)client);
394+
sharePositive(closure_handler);
395+
run_Int(closure_handler, (int64_t)client);
397396
}
398397

399398
void c_tcp_listen(Int listener, struct Pos handler, Stack stack) {

0 commit comments

Comments
 (0)