fix(cw_monero): move isolates to top level functions so WalletBase will not get sent over. (#2269)

cyan committed May 15, 2025 at 14:17 UTC 66efce4d702b8a3f2eb35d03641083547620b3ef
1 file changed +17 -13
cw_monero/lib/monero_wallet_service.dart
+17 -13
@@ -224,19 +224,7 @@ class MoneroWalletService extends WalletService<
224 final wmaddr = wmPtr.ffiAddress();
225 final waddr = w.ffiAddress();
226 openedWalletsByPath.remove("$path/$wallet");
227 - if (Platform.isWindows) {
228 - await Isolate.run(() {
229 - monero.WalletManager_closeWallet(
230 - Pointer.fromAddress(wmaddr), Pointer.fromAddress(waddr), true);
231 - monero.WalletManager_errorString(Pointer.fromAddress(wmaddr));
232 - });
233 - } else {
234 - unawaited(Isolate.run(() {
235 - monero.WalletManager_closeWallet(
236 - Pointer.fromAddress(wmaddr), Pointer.fromAddress(waddr), true);
237 - monero.WalletManager_errorString(Pointer.fromAddress(wmaddr));
238 - }));
239 - }
227 + await closeWalletAwaitIfShould(wmaddr, waddr);
228 printV("wallet closed");
229 }
230
@@ -570,3 +558,19 @@ class MoneroWalletService extends WalletService<
558 false;
559 }
560 }
561 +
562 +Future<void> closeWalletAwaitIfShould(int wmaddr, int waddr) async {
563 + if (Platform.isWindows) {
564 + await Isolate.run(() {
565 + monero.WalletManager_closeWallet(
566 + Pointer.fromAddress(wmaddr), Pointer.fromAddress(waddr), true);
567 + monero.WalletManager_errorString(Pointer.fromAddress(wmaddr));
568 + });
569 + } else {
570 + unawaited(Isolate.run(() {
571 + monero.WalletManager_closeWallet(
572 + Pointer.fromAddress(wmaddr), Pointer.fromAddress(waddr), true);
573 + monero.WalletManager_errorString(Pointer.fromAddress(wmaddr));
574 + }));
575 + }
576 +}
\ No newline at end of file