From 91db75a7672445832733ea76e68dadcad1db5040 Mon Sep 17 00:00:00 2001 From: Vera Xia Date: Thu, 1 May 2025 14:31:48 -0700 Subject: [PATCH 1/3] WIP: acquire event loop ... --- source/connection_manager.c | 4 ++++ source/http2_stream_manager.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/source/connection_manager.c b/source/connection_manager.c index 06007005c..6eda75b5b 100644 --- a/source/connection_manager.c +++ b/source/connection_manager.c @@ -740,6 +740,8 @@ static void s_aws_http_connection_manager_finish_destroy(struct aws_http_connect aws_mem_release(manager->allocator, manager->cull_task); } + aws_event_loop_group_release_from_event_loop(manager->cull_event_loop); + aws_mutex_clean_up(&manager->lock); aws_client_bootstrap_release(manager->bootstrap); @@ -852,6 +854,8 @@ static void s_schedule_culling(struct aws_http_connection_manager *manager) { if (manager->cull_event_loop == NULL) { manager->cull_event_loop = aws_event_loop_group_get_next_loop(manager->bootstrap->event_loop_group); + // Acquire the event loop group to make sure it doesn't get destroyed while we are using the event loop. + aws_event_loop_group_acquire_from_event_loop(manager->cull_event_loop); } AWS_FATAL_ASSERT(manager->cull_event_loop != NULL); diff --git a/source/http2_stream_manager.c b/source/http2_stream_manager.c index 9cd9a9520..4b8851e11 100644 --- a/source/http2_stream_manager.c +++ b/source/http2_stream_manager.c @@ -295,6 +295,7 @@ static void s_finish_pending_stream_acquisitions_task(struct aws_task *task, voi stream_manager, &pending_stream_acquisitions, AWS_ERROR_HTTP_STREAM_MANAGER_SHUTTING_DOWN); aws_mem_release(stream_manager->allocator, task); s_aws_http2_stream_manager_execute_transaction(&work); + aws_event_loop_group_release_from_event_loop(stream_manager->finish_pending_stream_acquisitions_task_event_loop); } /* helper function for building the transaction: how many new connections we should request */ @@ -379,6 +380,9 @@ static void s_aws_http2_stream_manager_build_transaction_synced(struct aws_http2 /* schedule a task to finish the pending acquisitions if there doesn't have one and needed */ stream_manager->finish_pending_stream_acquisitions_task_event_loop = aws_event_loop_group_get_next_loop(stream_manager->bootstrap->event_loop_group); + /* Acquire a refcount for the task , released when task finished + * s_finish_pending_stream_acquisitions_task */ + aws_event_loop_group_acquire_from_event_loop(stream_manager->bootstrap->event_loop_group); struct aws_task *finish_pending_stream_acquisitions_task = aws_mem_calloc(stream_manager->allocator, 1, sizeof(struct aws_task)); aws_task_init( From 0650d7bb5de18d617b1214728788b455c4cf8f9e Mon Sep 17 00:00:00 2001 From: Vera Xia Date: Mon, 5 May 2025 10:08:27 -0700 Subject: [PATCH 2/3] acquire finish_pending_stream_acquisitions_task_event_loop --- source/http2_stream_manager.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/http2_stream_manager.c b/source/http2_stream_manager.c index 4b8851e11..96e90586f 100644 --- a/source/http2_stream_manager.c +++ b/source/http2_stream_manager.c @@ -382,7 +382,8 @@ static void s_aws_http2_stream_manager_build_transaction_synced(struct aws_http2 aws_event_loop_group_get_next_loop(stream_manager->bootstrap->event_loop_group); /* Acquire a refcount for the task , released when task finished * s_finish_pending_stream_acquisitions_task */ - aws_event_loop_group_acquire_from_event_loop(stream_manager->bootstrap->event_loop_group); + aws_event_loop_group_acquire_from_event_loop( + stream_manager->finish_pending_stream_acquisitions_task_event_loop); struct aws_task *finish_pending_stream_acquisitions_task = aws_mem_calloc(stream_manager->allocator, 1, sizeof(struct aws_task)); aws_task_init( From 5df4eb1613a89489df7b6a073ad0c19949faedc7 Mon Sep 17 00:00:00 2001 From: Vera Xia Date: Mon, 5 May 2025 14:42:38 -0700 Subject: [PATCH 3/3] kick ci