@@ -37,6 +37,7 @@ public actual object AwsSigner {
3737 request.toNativeRequest().usePinned { nativeRequest ->
3838 // Pair of HTTP request and callback channel containing the signature
3939 val userData = nativeRequest to Channel <ByteArray >(1 )
40+ val userDataStableRef = StableRef .create(userData)
4041
4142 val signable = checkNotNull(
4243 aws_signable_new_http_request(
@@ -47,20 +48,21 @@ public actual object AwsSigner {
4748
4849 val nativeSigningConfig: CPointer < aws_signing_config_base> = config.toNativeSigningConfig().reinterpret()
4950
50- StableRef .create(userData).use { userDataStableRef ->
51- awsAssertOpSuccess(
52- aws_sign_request_aws(
53- allocator = Allocator .Default .allocator,
54- signable = signable,
55- base_config = nativeSigningConfig,
56- on_complete = staticCFunction(::signCallback),
57- userdata = userDataStableRef.asCPointer(),
58- ),
59- ) { " sign() aws_sign_request_aws" }
51+ awsAssertOpSuccess(
52+ aws_sign_request_aws(
53+ allocator = Allocator .Default .allocator,
54+ signable = signable,
55+ base_config = nativeSigningConfig,
56+ on_complete = staticCFunction(::signCallback),
57+ userdata = userDataStableRef.asCPointer(),
58+ ),
59+ ) { " sign() aws_sign_request_aws" }
6060
61- val callbackChannel = userDataStableRef.get().second
62- val signature = callbackChannel.receive() // wait for async signing to complete....
63- return AwsSigningResult (nativeRequest.get().toHttpRequest(), signature)
61+ val callbackChannel = userDataStableRef.get().second
62+ val signature = callbackChannel.receive() // wait for async signing to complete....
63+ return AwsSigningResult (nativeRequest.get().toHttpRequest(), signature).also {
64+ userDataStableRef.dispose()
65+ callbackChannel.close()
6466 }
6567 }
6668 }
0 commit comments