Fixed bug in detection of unchanged properties.

This commit is contained in:
akwizgran
2016-01-27 12:32:21 +00:00
parent c776d1e893
commit d63f997813

View File

@@ -44,7 +44,6 @@ import java.util.Map.Entry;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.logging.Logger; import java.util.logging.Logger;
import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING; import static java.util.logging.Level.WARNING;
import static org.briarproject.api.properties.TransportPropertyConstants.MAX_PROPERTY_LENGTH; import static org.briarproject.api.properties.TransportPropertyConstants.MAX_PROPERTY_LENGTH;
import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH; import static org.briarproject.api.sync.SyncConstants.MESSAGE_HEADER_LENGTH;
@@ -302,28 +301,27 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
// Create the local group if necessary // Create the local group if necessary
db.addGroup(localGroup); db.addGroup(localGroup);
// Merge the new properties with any existing properties // Merge the new properties with any existing properties
TransportProperties merged;
Latest latest = findLatest(localGroup.getId(), true).get(t); Latest latest = findLatest(localGroup.getId(), true).get(t);
if (latest != null) { if (latest == null) {
merged = p;
} else {
byte[] raw = db.getRawMessage(latest.messageId); byte[] raw = db.getRawMessage(latest.messageId);
TransportProperties old = decodeProperties(raw); TransportProperties old = decodeProperties(raw);
if (old.equals(p)) return; // Unchanged merged = new TransportProperties(old);
old.putAll(p); merged.putAll(p);
p = old; if (merged.equals(old)) return; // Unchanged
} }
// Store the merged properties in the local group // Store the merged properties in the local group
DeviceId dev = db.getDeviceId(); DeviceId dev = db.getDeviceId();
long version = latest == null ? 0 : latest.version + 1; long version = latest == null ? 0 : latest.version + 1;
storeMessage(localGroup.getId(), dev, t, p, version); storeMessage(localGroup.getId(), dev, t, merged, version);
if (LOG.isLoggable(INFO)) {
LOG.info("Stored local properties for " + t.getString()
+ ", version " + version);
}
// Store the merged properties in each contact's group // Store the merged properties in each contact's group
for (Contact c : db.getContacts()) { for (Contact c : db.getContacts()) {
Group g = getContactGroup(c); Group g = getContactGroup(c);
latest = findLatest(g.getId(), true).get(t); latest = findLatest(g.getId(), true).get(t);
version = latest == null ? 0 : latest.version + 1; version = latest == null ? 0 : latest.version + 1;
storeMessage(g.getId(), dev, t, p, version); storeMessage(g.getId(), dev, t, merged, version);
} }
} catch (IOException e) { } catch (IOException e) {
throw new DbException(e); throw new DbException(e);