@@ -358,42 +358,41 @@ typedef struct {
358
358
359
359
void c_tcp_listen_cb (uv_stream_t * server , int status ) {
360
360
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 ;
361
363
362
364
if (status < 0 ) {
363
- // TODO resume last
364
- erasePositive (listen_closure -> handler );
365
- resume_Int (listen_closure -> stack , status );
366
- free (listen_closure );
367
365
server -> data = NULL ;
366
+ free (listen_closure );
367
+ erasePositive (closure_handler );
368
+ resume_Int (closure_stack , status );
368
369
return ;
369
370
}
370
371
371
372
uv_tcp_t * client = malloc (sizeof (uv_tcp_t ));
372
373
int result = uv_tcp_init (uv_default_loop (), client );
373
374
374
375
if (result < 0 ) {
375
- // TODO resume last
376
376
free (client );
377
- erasePositive (listen_closure -> handler );
378
- resume_Int (listen_closure -> stack , result );
379
- free (listen_closure );
380
377
server -> data = NULL ;
378
+ free (listen_closure );
379
+ erasePositive (closure_handler );
380
+ resume_Int (closure_stack , result );
381
381
return ;
382
382
}
383
383
384
384
result = uv_accept (server , (uv_stream_t * )client );
385
385
if (result < 0 ) {
386
- // TODO resume last
387
386
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 );
391
387
server -> data = NULL ;
388
+ free (listen_closure );
389
+ erasePositive (closure_handler );
390
+ resume_Int (closure_stack , result );
392
391
return ;
393
392
}
394
393
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 );
397
396
}
398
397
399
398
void c_tcp_listen (Int listener , struct Pos handler , Stack stack ) {
0 commit comments