Jonathan Hart
Committed by Brian O'Connor

Move sending advertisement outside synchronized block

Change-Id: I1709fecbec5e6f5ac245b535c14a5c0b2aea2820
...@@ -530,10 +530,9 @@ public class EventuallyConsistentMapImpl<K, V> ...@@ -530,10 +530,9 @@ public class EventuallyConsistentMapImpl<K, V>
530 530
531 private void handleAntiEntropyAdvertisement(AntiEntropyAdvertisement<K> ad) { 531 private void handleAntiEntropyAdvertisement(AntiEntropyAdvertisement<K> ad) {
532 List<EventuallyConsistentMapEvent<K, V>> externalEvents; 532 List<EventuallyConsistentMapEvent<K, V>> externalEvents;
533 + boolean sync = false;
533 534
534 synchronized (this) { 535 synchronized (this) {
535 - final NodeId sender = ad.sender();
536 -
537 externalEvents = antiEntropyCheckLocalItems(ad); 536 externalEvents = antiEntropyCheckLocalItems(ad);
538 537
539 antiEntropyCheckLocalRemoved(ad); 538 antiEntropyCheckLocalRemoved(ad);
...@@ -543,20 +542,25 @@ public class EventuallyConsistentMapImpl<K, V> ...@@ -543,20 +542,25 @@ public class EventuallyConsistentMapImpl<K, V>
543 // if remote ad has something unknown, actively sync 542 // if remote ad has something unknown, actively sync
544 for (K key : ad.timestamps().keySet()) { 543 for (K key : ad.timestamps().keySet()) {
545 if (!items.containsKey(key)) { 544 if (!items.containsKey(key)) {
546 - AntiEntropyAdvertisement<K> myAd = createAdvertisement(); 545 + sync = true;
547 - try { 546 + break;
548 - unicastMessage(sender, antiEntropyAdvertisementSubject,
549 - myAd);
550 - break;
551 - } catch (IOException e) {
552 - log.debug(
553 - "Failed to send reactive anti-entropy advertisement to {}",
554 - sender);
555 - }
556 } 547 }
557 } 548 }
558 } // synchronized (this) 549 } // synchronized (this)
559 550
551 + // Send the advertisement outside the synchronized block
552 + if (sync) {
553 + final NodeId sender = ad.sender();
554 + AntiEntropyAdvertisement<K> myAd = createAdvertisement();
555 + try {
556 + unicastMessage(sender, antiEntropyAdvertisementSubject, myAd);
557 + } catch (IOException e) {
558 + log.debug(
559 + "Failed to send reactive anti-entropy advertisement to {}",
560 + sender);
561 + }
562 + }
563 +
560 externalEvents.forEach(this::notifyListeners); 564 externalEvents.forEach(this::notifyListeners);
561 } 565 }
562 566
......