@@ -45,7 +45,7 @@ final class SQLitePackageCollectionsStorage: PackageCollectionsStorage, Closable
45
45
46
46
// Targets have in-memory trie in addition to SQLite FTS as optimization
47
47
private let targetTrie = Trie < CollectionPackage > ( )
48
- private var targetTrieReady = ThreadSafeBox < Bool > ( )
48
+ private var targetTrieReady = false
49
49
private let populateTargetTrieLock = Lock ( )
50
50
51
51
init ( location: SQLite . Location ? = nil , configuration: Configuration = . init( ) , diagnosticsEngine: DiagnosticsEngine ? = nil ) {
@@ -504,7 +504,7 @@ final class SQLitePackageCollectionsStorage: PackageCollectionsStorage, Closable
504
504
var matchingCollections = Set < Model . CollectionIdentifier > ( )
505
505
506
506
// Trie is more performant for target search; use it if available
507
- if self . targetTrieReady. get ( ) ?? false {
507
+ if self . targetTrieReady {
508
508
do {
509
509
switch type {
510
510
case . exactMatch:
@@ -763,42 +763,41 @@ final class SQLitePackageCollectionsStorage: PackageCollectionsStorage, Closable
763
763
internal func populateTargetTrie( callback: @escaping ( Result < Void , Error > ) -> Void = { _ in } ) {
764
764
DispatchQueue . sharedConcurrent. async ( group: nil , qos: . background, flags: . assignCurrentContext) {
765
765
do {
766
- try self . populateTargetTrieLock. withLock { // Prevents race to calling targetTrieReady.memoize
767
- _ = try self . targetTrieReady . memoize { // memoize body is only executed once
768
- // since running on low priority thread make sure the database has not already gone away
769
- switch ( try self . withStateLock { self . state } ) {
770
- case . disconnected , . disconnecting :
771
- return false
772
- default :
773
- break
774
- }
766
+ try self . populateTargetTrieLock. withLock { // Prevent race to populate targetTrie
767
+ // since running on low priority thread make sure the database has not already gone away
768
+ switch ( try self . withStateLock { self . state } ) {
769
+ case . disconnected , . disconnecting :
770
+ self . targetTrieReady = false
771
+ return
772
+ default :
773
+ break
774
+ }
775
775
776
- // Use FTS to build the trie
777
- let query = " SELECT collection_id_blob_base64, package_repository_url, name FROM \( Self . targetsFTSName) ; "
778
- try self . executeStatement ( query) { statement in
779
- while let row = try statement. step ( ) {
780
- #if os(Linux)
781
- // lock not required since executeStatement locks
782
- guard case . connected = self . state else {
783
- return
784
- }
785
- #else
786
- guard case . connected = ( try self . withStateLock { self . state } ) else {
787
- return
788
- }
789
- #endif
776
+ // Use FTS to build the trie
777
+ let query = " SELECT collection_id_blob_base64, package_repository_url, name FROM \( Self . targetsFTSName) ; "
778
+ try self . executeStatement ( query) { statement in
779
+ while let row = try statement. step ( ) {
780
+ #if os(Linux)
781
+ // lock not required since executeStatement locks
782
+ guard case . connected = self . state else {
783
+ return
784
+ }
785
+ #else
786
+ guard case . connected = ( try self . withStateLock { self . state } ) else {
787
+ return
788
+ }
789
+ #endif
790
790
791
- let targetName = row. string ( at: 2 )
791
+ let targetName = row. string ( at: 2 )
792
792
793
- if let collectionData = Data ( base64Encoded: row. string ( at: 0 ) ) ,
794
- let collection = try ? self . decoder. decode ( Model . CollectionIdentifier. self, from: collectionData) {
795
- let collectionPackage = CollectionPackage ( collection: collection, package : PackageIdentity ( url: row. string ( at: 1 ) ) )
796
- self . targetTrie. insert ( word: targetName. lowercased ( ) , foundIn: collectionPackage)
797
- }
793
+ if let collectionData = Data ( base64Encoded: row. string ( at: 0 ) ) ,
794
+ let collection = try ? self . decoder. decode ( Model . CollectionIdentifier. self, from: collectionData) {
795
+ let collectionPackage = CollectionPackage ( collection: collection, package : PackageIdentity ( url: row. string ( at: 1 ) ) )
796
+ self . targetTrie. insert ( word: targetName. lowercased ( ) , foundIn: collectionPackage)
798
797
}
799
798
}
800
- return true
801
799
}
800
+ self . targetTrieReady = true
802
801
}
803
802
callback ( . success( ( ) ) )
804
803
} catch {
0 commit comments