Skip to content

Commit 91db75a

Browse files
committed
WIP: acquire event loop ...
1 parent ca7e0e2 commit 91db75a

2 files changed

Lines changed: 8 additions & 0 deletions

File tree

source/connection_manager.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,8 @@ static void s_aws_http_connection_manager_finish_destroy(struct aws_http_connect
740740
aws_mem_release(manager->allocator, manager->cull_task);
741741
}
742742

743+
aws_event_loop_group_release_from_event_loop(manager->cull_event_loop);
744+
743745
aws_mutex_clean_up(&manager->lock);
744746

745747
aws_client_bootstrap_release(manager->bootstrap);
@@ -852,6 +854,8 @@ static void s_schedule_culling(struct aws_http_connection_manager *manager) {
852854

853855
if (manager->cull_event_loop == NULL) {
854856
manager->cull_event_loop = aws_event_loop_group_get_next_loop(manager->bootstrap->event_loop_group);
857+
// Acquire the event loop group to make sure it doesn't get destroyed while we are using the event loop.
858+
aws_event_loop_group_acquire_from_event_loop(manager->cull_event_loop);
855859
}
856860
AWS_FATAL_ASSERT(manager->cull_event_loop != NULL);
857861

source/http2_stream_manager.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ static void s_finish_pending_stream_acquisitions_task(struct aws_task *task, voi
295295
stream_manager, &pending_stream_acquisitions, AWS_ERROR_HTTP_STREAM_MANAGER_SHUTTING_DOWN);
296296
aws_mem_release(stream_manager->allocator, task);
297297
s_aws_http2_stream_manager_execute_transaction(&work);
298+
aws_event_loop_group_release_from_event_loop(stream_manager->finish_pending_stream_acquisitions_task_event_loop);
298299
}
299300

300301
/* 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
379380
/* schedule a task to finish the pending acquisitions if there doesn't have one and needed */
380381
stream_manager->finish_pending_stream_acquisitions_task_event_loop =
381382
aws_event_loop_group_get_next_loop(stream_manager->bootstrap->event_loop_group);
383+
/* Acquire a refcount for the task , released when task finished
384+
* s_finish_pending_stream_acquisitions_task */
385+
aws_event_loop_group_acquire_from_event_loop(stream_manager->bootstrap->event_loop_group);
382386
struct aws_task *finish_pending_stream_acquisitions_task =
383387
aws_mem_calloc(stream_manager->allocator, 1, sizeof(struct aws_task));
384388
aws_task_init(

0 commit comments

Comments
 (0)