diff --git a/.gitignore b/.gitignore index d11e523..bda0b43 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ target/ *.dylib *.dll *.zip +*.xcframework/ isar-dart.h # Android related diff --git a/packages/isar/CHANGELOG.md b/packages/isar/CHANGELOG.md index f76b1d5..aef9250 100644 --- a/packages/isar/CHANGELOG.md +++ b/packages/isar/CHANGELOG.md @@ -1,3 +1,9 @@ +## 3.0.2 + +### Fixes + +- Fixed native ports that were not closed correctly in some cases + ## 3.0.1 ### Enhancements diff --git a/packages/isar/lib/src/native/isar_collection_impl.dart b/packages/isar/lib/src/native/isar_collection_impl.dart index a6e4a71..0551ee3 100644 --- a/packages/isar/lib/src/native/isar_collection_impl.dart +++ b/packages/isar/lib/src/native/isar_collection_impl.dart @@ -539,6 +539,7 @@ class IsarCollectionImpl extends IsarCollection { final controller = StreamController( onCancel: () { IC.isar_stop_watching(handle); + port.close(); }, ); @@ -569,6 +570,7 @@ class IsarCollectionImpl extends IsarCollection { final controller = StreamController( onCancel: () { IC.isar_stop_watching(handle); + port.close(); }, ); diff --git a/packages/isar/lib/src/native/isar_core.dart b/packages/isar/lib/src/native/isar_core.dart index c3aaa6e..39bcdba 100644 --- a/packages/isar/lib/src/native/isar_core.dart +++ b/packages/isar/lib/src/native/isar_core.dart @@ -177,18 +177,15 @@ void nCall(int result) { } Stream wrapIsarPort(ReceivePort port) { - final portStreamController = StreamController.broadcast(); - port.listen( - (event) { - if (event == 0) { - portStreamController.add(null); - } else { - final error = isarErrorFromResult(event as int); - portStreamController.addError(error!); - } - }, - onDone: portStreamController.close, - ); + final portStreamController = StreamController(onCancel: port.close); + port.listen((event) { + if (event == 0) { + portStreamController.add(null); + } else { + final error = isarErrorFromResult(event as int); + portStreamController.addError(error!); + } + }); return portStreamController.stream; } diff --git a/packages/isar/lib/src/native/isar_impl.dart b/packages/isar/lib/src/native/isar_impl.dart index f14bf1c..27b495f 100644 --- a/packages/isar/lib/src/native/isar_impl.dart +++ b/packages/isar/lib/src/native/isar_impl.dart @@ -57,14 +57,15 @@ class IsarImpl extends IsarCommon implements Finalizable { port.sendPort.nativePort, ); - await portStream.first; - return Txn(txnPtrPtr.value, write, portStream); + final txn = Txn.async(txnPtrPtr.value, write, portStream); + await txn.wait(); + return txn; } @override Transaction beginTxnSync(bool write, bool silent) { nCall(IC.isar_txn_begin(ptr, _syncTxnPtrPtr, true, write, silent, 0)); - return Txn(_syncTxnPtrPtr.value, write, null); + return Txn.sync(_syncTxnPtrPtr.value, write); } @override diff --git a/packages/isar/lib/src/native/query_impl.dart b/packages/isar/lib/src/native/query_impl.dart index 3385521..a5d2452 100644 --- a/packages/isar/lib/src/native/query_impl.dart +++ b/packages/isar/lib/src/native/query_impl.dart @@ -129,6 +129,7 @@ class QueryImpl extends Query implements Finalizable { final controller = StreamController( onCancel: () { IC.isar_stop_watching(handle); + port.close(); }, ); diff --git a/packages/isar/lib/src/native/txn.dart b/packages/isar/lib/src/native/txn.dart index 3a1b916..9012fd7 100644 --- a/packages/isar/lib/src/native/txn.dart +++ b/packages/isar/lib/src/native/txn.dart @@ -10,15 +10,15 @@ import 'package:isar/src/native/isar_core.dart'; /// @nodoc class Txn extends Transaction { /// @nodoc - Txn(this.ptr, bool write, Stream? stream) - : super(stream == null, write) { - if (stream != null) { - _completers = Queue(); - stream.listen( - (_) => _completers.removeFirst().complete(), - onError: (Object e) => _completers.removeFirst().completeError(e), - ); - } + Txn.sync(this.ptr, bool write) : super(true, write); + + /// @nodoc + Txn.async(this.ptr, bool write, Stream stream) : super(false, write) { + _completers = Queue(); + stream.listen( + (_) => _completers.removeFirst().complete(), + onError: (Object e) => _completers.removeFirst().completeError(e), + ); } /// An arena allocator that has the same lifetime as this transaction. diff --git a/packages/isar/pubspec.yaml b/packages/isar/pubspec.yaml index 5cae57f..34911f5 100644 --- a/packages/isar/pubspec.yaml +++ b/packages/isar/pubspec.yaml @@ -1,6 +1,6 @@ name: isar description: Extremely fast, easy to use, and fully async NoSQL database for Flutter. -version: 3.0.0 +version: 3.0.1 repository: https://github.com/isar/isar/tree/main/packages/isar homepage: https://github.com/isar/isar issue_tracker: https://github.com/isar/isar/issues diff --git a/packages/isar_flutter_libs/.pubignore b/packages/isar_flutter_libs/.pubignore index 91c8298..f4c9bc1 100644 --- a/packages/isar_flutter_libs/.pubignore +++ b/packages/isar_flutter_libs/.pubignore @@ -1,4 +1,5 @@ !*.so !*.a !*.dylib -!*.dll \ No newline at end of file +!*.dll +!*.xcframework/ \ No newline at end of file diff --git a/packages/isar_flutter_libs/pubspec.yaml b/packages/isar_flutter_libs/pubspec.yaml index 7ccb27d..2e92356 100644 --- a/packages/isar_flutter_libs/pubspec.yaml +++ b/packages/isar_flutter_libs/pubspec.yaml @@ -1,6 +1,6 @@ name: isar_flutter_libs description: Isar Core binaries for the Isar Database. Needs to be included for Flutter apps. -version: 3.0.0 +version: 3.0.1 repository: https://github.com/isar/isar homepage: https://isar.dev @@ -11,7 +11,7 @@ environment: dependencies: flutter: sdk: flutter - isar: 3.0.0 + isar: 3.0.1 flutter: plugin: diff --git a/packages/isar_generator/pubspec.yaml b/packages/isar_generator/pubspec.yaml index ffe2201..bbd6a5c 100644 --- a/packages/isar_generator/pubspec.yaml +++ b/packages/isar_generator/pubspec.yaml @@ -1,6 +1,6 @@ name: isar_generator description: Code generator for the Isar Database. Finds classes annotated with @Collection. -version: 3.0.0 +version: 3.0.1 repository: https://github.com/isar/isar homepage: https://isar.dev @@ -13,7 +13,7 @@ dependencies: dart_style: ^2.2.3 dartx: ^1.1.0 glob: ^2.0.2 - isar: 3.0.0 + isar: 3.0.1 path: ^1.8.1 source_gen: ^1.2.2 xxh3: ^1.0.1 diff --git a/tool/download_binaries.sh b/tool/download_binaries.sh index f8d0594..37490e9 100644 --- a/tool/download_binaries.sh +++ b/tool/download_binaries.sh @@ -11,6 +11,7 @@ curl "${github}/libisar_android_x86.so" -o packages/isar_flutter_libs/android/sr curl "${github}/isar_ios.xcframework.zip" -o packages/isar_flutter_libs/ios/isar_ios.xcframework.zip --create-dirs -L -f unzip packages/isar_flutter_libs/ios/isar_ios.xcframework.zip -d packages/isar_flutter_libs/ios +rm packages/isar_flutter_libs/ios/isar_ios.xcframework.zip curl "${github}/libisar_macos.dylib" -o packages/isar_flutter_libs/macos/libisar.dylib --create-dirs -L -f install_name_tool -id @rpath/libisar.dylib packages/isar_flutter_libs/macos/libisar.dylib