mirror of
https://github.com/sparrowwallet/sparrow.git
synced 2024-12-24 12:46:45 +00:00
cormorant: threading and scan date initialization improvements
This commit is contained in:
parent
4ad9cdedb6
commit
7c64d689fd
2 changed files with 10 additions and 2 deletions
|
@ -249,7 +249,9 @@ public class BitcoindClient {
|
|||
}
|
||||
|
||||
private void importDescriptors(Map<String, ScanDate> descriptors) {
|
||||
for(String descriptor : descriptors.keySet()) {
|
||||
//Sort descriptors in alphanumeric order to avoid deadlocks, particularly with BIP47 wallets
|
||||
Set<String> sortedDescriptors = new TreeSet<>(descriptors.keySet());
|
||||
for(String descriptor : sortedDescriptors) {
|
||||
Lock lock = descriptorLocks.computeIfAbsent(descriptor, desc -> new ReentrantLock());
|
||||
lock.lock();
|
||||
descriptorBirthDates.put(descriptor, descriptors.get(descriptor).rescanSince);
|
||||
|
@ -278,8 +280,10 @@ public class BitcoindClient {
|
|||
for(ListDescriptorResult result : listDescriptorsResult.descriptors()) {
|
||||
String descriptor = OutputDescriptor.normalize(result.desc());
|
||||
ScanDate previousScanDate = importedDescriptors.get(descriptor);
|
||||
Date scanDate = result.getScanDate();
|
||||
Date rescanSince = scanDate != null ? scanDate : (previousScanDate != null ? previousScanDate.rescanSince : null);
|
||||
Integer range = result.range() == null ? null : result.range().get(result.range().size() - 1);
|
||||
importedDescriptors.put(descriptor, new ScanDate(previousScanDate == null ? null : previousScanDate.rescanSince, range, false));
|
||||
importedDescriptors.put(descriptor, new ScanDate(rescanSince, range, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,8 +2,12 @@ package com.sparrowwallet.sparrow.net.cormorant.bitcoind;
|
|||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public record ListDescriptorResult(String desc, long timestamp, boolean active, boolean internal, List<Integer> range) {
|
||||
public Date getScanDate() {
|
||||
return timestamp > 0 ? new Date(timestamp * 1000) : null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue