Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package aws-c-io for openSUSE:Factory checked in at 2025-09-02 18:00:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/aws-c-io (Old) and /work/SRC/openSUSE:Factory/.aws-c-io.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aws-c-io" Tue Sep 2 18:00:30 2025 rev:27 rq:1302412 version:0.21.4 Changes: -------- --- /work/SRC/openSUSE:Factory/aws-c-io/aws-c-io.changes 2025-07-23 16:39:13.333653519 +0200 +++ /work/SRC/openSUSE:Factory/.aws-c-io.new.1977/aws-c-io.changes 2025-09-02 18:02:02.283867178 +0200 @@ -1,0 +2,12 @@ +Tue Sep 2 08:27:37 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to version 0.21.4 + * Scheduled Iteration Mem-release Order by @sbSteveK in (#752) +- from version 0.21.3 + * Change stale issue and discussion handling to run once a week + by @DmitriyMusatkin in (#747) + * Fix warnings found by the Undefined Behavior Sanitizer by @bjosv in (#748) + * Fix memory leaks in NW socket by @sfod in (#749) + * Fix Dispatch Queue Leak by @xiazhvera in (#750) + +------------------------------------------------------------------- Old: ---- v0.21.2.tar.gz New: ---- v0.21.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ aws-c-io.spec ++++++ --- /var/tmp/diff_new_pack.KO2vQh/_old 2025-09-02 18:02:03.003897430 +0200 +++ /var/tmp/diff_new_pack.KO2vQh/_new 2025-09-02 18:02:03.003897430 +0200 @@ -21,7 +21,7 @@ %define library_version 1.0.0 %define library_soversion 0unstable Name: aws-c-io -Version: 0.21.2 +Version: 0.21.4 Release: 0 Summary: I/O and TLS package AWS SDK for C License: Apache-2.0 ++++++ v0.21.2.tar.gz -> v0.21.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/.github/workflows/handle-stale-discussions.yml new/aws-c-io-0.21.4/.github/workflows/handle-stale-discussions.yml --- old/aws-c-io-0.21.2/.github/workflows/handle-stale-discussions.yml 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/.github/workflows/handle-stale-discussions.yml 2025-08-20 22:08:05.000000000 +0200 @@ -1,7 +1,7 @@ name: HandleStaleDiscussions on: schedule: - - cron: '0 */4 * * *' + - cron: "0 9 * * 1" discussion_comment: types: [created] @@ -15,4 +15,4 @@ - name: Stale discussions action uses: aws-github-ops/handle-stale-discussions@v1 env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/.github/workflows/stale_issue.yml new/aws-c-io-0.21.4/.github/workflows/stale_issue.yml --- old/aws-c-io-0.21.2/.github/workflows/stale_issue.yml 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/.github/workflows/stale_issue.yml 2025-08-20 22:08:05.000000000 +0200 @@ -3,7 +3,7 @@ # Controls when the action will run. on: schedule: - - cron: "*/60 * * * *" + - cron: "0 9 * * 1" jobs: cleanup: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/channel_bootstrap.c new/aws-c-io-0.21.4/source/channel_bootstrap.c --- old/aws-c-io-0.21.2/source/channel_bootstrap.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/channel_bootstrap.c 2025-08-20 22:08:05.000000000 +0200 @@ -27,11 +27,12 @@ struct struct_type *shutdown_args = struct_type##_new(allocator, __VA_ARGS__); \ aws_socket_set_cleanup_complete_callback(socket, init_function, shutdown_args); -static void s_client_bootstrap_destroy_impl(struct aws_client_bootstrap *bootstrap) { +static void s_client_bootstrap_destroy_impl(void *user_data) { + struct aws_client_bootstrap *bootstrap = user_data; AWS_ASSERT(bootstrap); AWS_LOGF_DEBUG(AWS_LS_IO_CHANNEL_BOOTSTRAP, "id=%p: bootstrap destroying", (void *)bootstrap); aws_client_bootstrap_shutdown_complete_fn *on_shutdown_complete = bootstrap->on_shutdown_complete; - void *user_data = bootstrap->user_data; + void *shutdown_user_data = bootstrap->user_data; aws_event_loop_group_release(bootstrap->event_loop_group); aws_host_resolver_release(bootstrap->host_resolver); @@ -39,7 +40,7 @@ aws_mem_release(bootstrap->allocator, bootstrap); if (on_shutdown_complete) { - on_shutdown_complete(user_data); + on_shutdown_complete(shutdown_user_data); } } @@ -159,7 +160,8 @@ return args; } -static void s_client_connection_args_destroy(struct client_connection_args *args) { +static void s_client_connection_args_destroy(void *user_data) { + struct client_connection_args *args = user_data; AWS_ASSERT(args); AWS_LOGF_TRACE(AWS_LS_IO_CHANNEL_BOOTSTRAP, "destroying client connection args, args=%p", (void *)args); @@ -1181,7 +1183,8 @@ return AWS_OP_ERR; } -void s_server_bootstrap_destroy_impl(struct aws_server_bootstrap *bootstrap) { +void s_server_bootstrap_destroy_impl(void *user_data) { + struct aws_server_bootstrap *bootstrap = user_data; AWS_ASSERT(bootstrap); aws_event_loop_group_release(bootstrap->event_loop_group); aws_mem_release(bootstrap->allocator, bootstrap); @@ -1265,7 +1268,8 @@ return args; } -static void s_server_connection_args_destroy(struct server_connection_args *args) { +static void s_server_connection_args_destroy(void *user_data) { + struct server_connection_args *args = user_data; if (args == NULL) { return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/darwin/dispatch_queue_event_loop.c new/aws-c-io-0.21.4/source/darwin/dispatch_queue_event_loop.c --- old/aws-c-io-0.21.2/source/darwin/dispatch_queue_event_loop.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/darwin/dispatch_queue_event_loop.c 2025-08-20 22:08:05.000000000 +0200 @@ -171,8 +171,9 @@ return; } - s_dispatch_loop_release(entry->dispatch_loop); + struct aws_dispatch_loop *dispatch_loop_for_release = entry->dispatch_loop; aws_mem_release(entry->allocator, entry); + s_dispatch_loop_release(dispatch_loop_for_release); } /* Manually called to destroy an aws_event_loop */ @@ -183,6 +184,7 @@ aws_task_scheduler_clean_up(&dispatch_loop->scheduler); } + dispatch_release(dispatch_loop->dispatch_queue); aws_mutex_clean_up(&dispatch_loop->synced_data.synced_data_lock); aws_condition_variable_clean_up(&dispatch_loop->synced_data.signal); // We don't need to clean up the dispatch_loop->synced_data.scheduled_iterations, as all scheduling entries should diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/darwin/dispatch_queue_event_loop_private.h new/aws-c-io-0.21.4/source/darwin/dispatch_queue_event_loop_private.h --- old/aws-c-io-0.21.2/source/darwin/dispatch_queue_event_loop_private.h 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/darwin/dispatch_queue_event_loop_private.h 2025-08-20 22:08:05.000000000 +0200 @@ -16,6 +16,8 @@ struct aws_tls_ctx ctx; CFAllocatorRef wrapped_allocator; CFArrayRef certs; + /* The certs field can be set in two different ways, and only one requires releasing individual cert objects. */ + bool cleanup_cert; sec_identity_t secitem_identity; CFArrayRef ca_cert; enum aws_tls_versions minimum_tls_version; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/darwin/nw_socket.c new/aws-c-io-0.21.4/source/darwin/nw_socket.c --- old/aws-c-io-0.21.2/source/darwin/nw_socket.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/darwin/nw_socket.c 2025-08-20 22:08:05.000000000 +0200 @@ -732,6 +732,8 @@ s_tls_verification_block(metadata, trust, complete, nw_socket, transport_ctx); }, dispatch_loop->dispatch_queue); + + nw_release(sec_options); } static int s_setup_socket_params(struct nw_socket *nw_socket, const struct aws_socket_options *options) { @@ -1041,12 +1043,8 @@ if (nw_socket->mode == NWSM_LISTENER) { nw_listener_cancel(nw_socket->os_handle.nw_listener); - nw_release(nw_socket->os_handle.nw_listener); - nw_socket->os_handle.nw_listener = NULL; } else if (nw_socket->mode == NWSM_CONNECTION) { nw_connection_cancel(nw_socket->os_handle.nw_connection); - nw_release(nw_socket->os_handle.nw_connection); - nw_socket->os_handle.nw_connection = NULL; } } @@ -1104,6 +1102,13 @@ nw_socket->on_socket_close_complete_fn(nw_socket->close_user_data); } } + + if (nw_socket->mode == NWSM_LISTENER) { + nw_release(nw_socket->os_handle.nw_listener); + } else if (nw_socket->mode == NWSM_CONNECTION) { + nw_release(nw_socket->os_handle.nw_connection); + } + s_release_event_loop(nw_socket); aws_ref_count_release(&nw_socket->nw_socket_ref_count); } @@ -1985,7 +1990,6 @@ // released when the connection state changed to nw_connection_state_cancelled s_socket_acquire_internal_ref(nw_socket); - nw_retain(socket->io_handle.data.handle); nw_connection_start(socket->io_handle.data.handle); s_unlock_socket_synced_data(nw_socket); @@ -2143,7 +2147,6 @@ socket->io_handle.set_queue = s_listener_set_dispatch_queue; nw_socket->os_handle.nw_listener = socket->io_handle.data.handle; - nw_retain(socket->io_handle.data.handle); nw_socket->mode = NWSM_LISTENER; AWS_LOGF_TRACE( @@ -2793,6 +2796,7 @@ nw_connection_send( socket->io_handle.data.handle, data, _nw_content_context_default_message, true, ^(nw_error_t error) { s_handle_nw_connection_send_completion_fn(error, data, nw_socket, written_fn, user_data); + dispatch_release(data); }); s_unlock_socket_synced_data(nw_socket); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/darwin/secure_transport_tls_channel_handler.c new/aws-c-io-0.21.4/source/darwin/secure_transport_tls_channel_handler.c --- old/aws-c-io-0.21.2/source/darwin/secure_transport_tls_channel_handler.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/darwin/secure_transport_tls_channel_handler.c 2025-08-20 22:08:05.000000000 +0200 @@ -1037,12 +1037,22 @@ return s_tls_handler_new(allocator, options, slot, kSSLServerSide); } +void s_aws_release_cert(const void *val, void *context) { + (void)context; + CFTypeRef cert = (CFTypeRef)val; + CFRelease(cert); +} + static void s_aws_secure_transport_ctx_destroy(struct secure_transport_ctx *secure_transport_ctx) { if (secure_transport_ctx == NULL) { return; } if (secure_transport_ctx->certs) { + if (secure_transport_ctx->cleanup_cert) { + CFRange range = CFRangeMake(0, CFArrayGetCount(secure_transport_ctx->certs)); + CFArrayApplyFunction(secure_transport_ctx->certs, range, s_aws_release_cert, NULL); + } CFRelease(secure_transport_ctx->certs); } @@ -1087,6 +1097,7 @@ secure_transport_ctx->verify_peer = options->verify_peer; secure_transport_ctx->ca_cert = NULL; secure_transport_ctx->certs = NULL; + secure_transport_ctx->cleanup_cert = false; secure_transport_ctx->secitem_identity = NULL; secure_transport_ctx->ctx.alloc = alloc; secure_transport_ctx->ctx.impl = secure_transport_ctx; @@ -1140,6 +1151,7 @@ aws_last_error()); goto cleanup_wrapped_allocator; } + secure_transport_ctx->cleanup_cert = true; } } else if (aws_tls_options_buf_is_set(&options->pkcs12)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/event_loop.c new/aws-c-io-0.21.4/source/event_loop.c --- old/aws-c-io-0.21.2/source/event_loop.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/event_loop.c 2025-08-20 22:08:05.000000000 +0200 @@ -216,7 +216,8 @@ aws_thread_current_at_exit(s_event_loop_group_thread_exit, el_group); } -static void s_aws_event_loop_group_shutdown_async(struct aws_event_loop_group *el_group) { +static void s_aws_event_loop_group_shutdown_async(void *user_data) { + struct aws_event_loop_group *el_group = user_data; /* It's possible that the last refcount was released on an event-loop thread, * so we would deadlock if we waited here for all the event-loop threads to shut down. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/host_resolver.c new/aws-c-io-0.21.4/source/host_resolver.c --- old/aws-c-io-0.21.2/source/host_resolver.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/host_resolver.c 2025-08-20 22:08:05.000000000 +0200 @@ -1496,7 +1496,8 @@ .purge_host_cache = s_resolver_purge_host_cache, }; -static void s_aws_host_resolver_destroy(struct aws_host_resolver *resolver) { +static void s_aws_host_resolver_destroy(void *user_data) { + struct aws_host_resolver *resolver = user_data; AWS_ASSERT(resolver->vtable && resolver->vtable->destroy); resolver->vtable->destroy(resolver); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/s2n/s2n_tls_channel_handler.c new/aws-c-io-0.21.4/source/s2n/s2n_tls_channel_handler.c --- old/aws-c-io-0.21.2/source/s2n/s2n_tls_channel_handler.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/s2n/s2n_tls_channel_handler.c 2025-08-20 22:08:05.000000000 +0200 @@ -1405,7 +1405,8 @@ return s_new_tls_handler(allocator, options, slot, S2N_SERVER); } -static void s_s2n_ctx_destroy(struct s2n_ctx *s2n_ctx) { +static void s_s2n_ctx_destroy(void *user_data) { + struct s2n_ctx *s2n_ctx = user_data; if (s2n_ctx != NULL) { if (s2n_ctx->s2n_config) { s2n_config_free(s2n_ctx->s2n_config); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-io-0.21.2/source/stream.c new/aws-c-io-0.21.4/source/stream.c --- old/aws-c-io-0.21.2/source/stream.c 2025-07-18 00:45:22.000000000 +0200 +++ new/aws-c-io-0.21.4/source/stream.c 2025-08-20 22:08:05.000000000 +0200 @@ -188,7 +188,8 @@ return AWS_OP_SUCCESS; } -static void s_aws_input_stream_byte_cursor_destroy(struct aws_input_stream_byte_cursor_impl *impl) { +static void s_aws_input_stream_byte_cursor_destroy(void *user_data) { + struct aws_input_stream_byte_cursor_impl *impl = user_data; aws_mem_release(impl->allocator, impl); } @@ -271,7 +272,8 @@ return aws_file_get_length(impl->file, length); } -static void s_aws_input_stream_file_destroy(struct aws_input_stream_file_impl *impl) { +static void s_aws_input_stream_file_destroy(void *user_data) { + struct aws_input_stream_file_impl *impl = user_data; if (impl->close_on_clean_up && impl->file) { fclose(impl->file);