@@ -412,6 +412,8 @@ void aws_s3_meta_request_increment_read_window(struct aws_s3_meta_request *meta_
412412 /* Response will never approach UINT64_MAX, so do a saturating sum instead of worrying about overflow */
413413 meta_request -> synced_data .read_window_running_total =
414414 aws_add_u64_saturating (bytes , meta_request -> synced_data .read_window_running_total );
415+ /* Kick off the event delivery task again see if we need to */
416+ aws_s3_meta_request_add_event_for_delivery_synced (meta_request , NULL );
415417
416418 aws_s3_meta_request_unlock_synced_data (meta_request );
417419 /* END CRITICAL SECTION */
@@ -1882,12 +1884,13 @@ void aws_s3_meta_request_add_event_for_delivery_synced(
18821884 const struct aws_s3_meta_request_event * event ) {
18831885
18841886 ASSERT_SYNCED_DATA_LOCK_HELD (meta_request );
1887+ if (event ) {
1888+ aws_array_list_push_back (& meta_request -> synced_data .event_delivery_array , event );
1889+ }
18851890
1886- aws_array_list_push_back (& meta_request -> synced_data .event_delivery_array , event );
1887-
1888- /* If the array was empty before, schedule task to deliver all events in the array.
1889- * If the array already had things in it, then the task is already scheduled and will run soon. */
1890- if (aws_array_list_length (& meta_request -> synced_data .event_delivery_array ) == 1 ) {
1891+ /* If the event delivery task is not scheduled before, and there are more to be delivery. */
1892+ if (!meta_request -> synced_data .event_delivery_task_scheduled &&
1893+ aws_array_list_length (& meta_request -> synced_data .event_delivery_array ) > 0 ) {
18911894 aws_s3_meta_request_acquire (meta_request );
18921895
18931896 aws_task_init (
@@ -1896,6 +1899,7 @@ void aws_s3_meta_request_add_event_for_delivery_synced(
18961899 meta_request ,
18971900 "s3_meta_request_event_delivery" );
18981901 aws_event_loop_schedule_task_now (meta_request -> io_event_loop , & meta_request -> synced_data .event_delivery_task );
1902+ meta_request -> synced_data .event_delivery_task_scheduled = true;
18991903 }
19001904}
19011905
@@ -1991,6 +1995,7 @@ static void s_s3_meta_request_event_delivery_task(struct aws_task *task, void *a
19911995
19921996 aws_array_list_swap_contents (event_delivery_array , & meta_request -> synced_data .event_delivery_array );
19931997 meta_request -> synced_data .event_delivery_active = true;
1998+ meta_request -> synced_data .event_delivery_task_scheduled = false;
19941999
19952000 if (aws_s3_meta_request_has_finish_result_synced (meta_request )) {
19962001 error_code = AWS_ERROR_S3_CANCELED ;
0 commit comments