Ver a proveniência

Topic: make reentrant

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
master
Jason A. Donenfeld há 6 anos
ascendente
cometimento
65292aaa79
1 ficheiros alterados com 17 adições e 6 eliminações
  1. +17
    -6
      app/src/main/java/com/wireguard/android/util/Topic.java

+ 17
- 6
app/src/main/java/com/wireguard/android/util/Topic.java Ver ficheiro

@@ -24,7 +24,9 @@ public class Topic {
if (subscribers == null) {
subscribers = new LinkedList<>();
}
subscribers.add(new WeakReference<>(sub));
synchronized (subscribers) {
subscribers.add(new WeakReference<>(sub));
}
}

public void unsubscribe() {
@@ -32,10 +34,12 @@ public class Topic {
}

public void unsubscribe(Subscriber sub) {
for (Iterator<WeakReference<Subscriber>> i = subscribers.iterator(); i.hasNext();) {
WeakReference<Subscriber> subscriber = i.next();
if (subscriber.get() == null || subscriber.get() == sub) {
i.remove();
synchronized (subscribers) {
for (Iterator<WeakReference<Subscriber>> i = subscribers.iterator(); i.hasNext(); ) {
WeakReference<Subscriber> subscriber = i.next();
if (subscriber.get() == null || subscriber.get() == sub) {
i.remove();
}
}
}
}
@@ -58,7 +62,11 @@ public class Topic {
state = PUBLISHED;
this.results = results;
if (subscribers != null) {
for (WeakReference<Subscriber> subscriber : subscribers) {
List<WeakReference<Subscriber>> subscribersCopy = new LinkedList<>();
synchronized (subscribers) {
subscribersCopy.addAll(subscribers);
}
for (WeakReference<Subscriber> subscriber : subscribersCopy) {
if (subscriber.get() != null)
subscriber.get().onTopicPublished(this);
}
@@ -86,12 +94,15 @@ public class Topic {
topic.subscribe(this);
}
}

default void unsubscribeTopics() {
for (Topic event : getSubscription()) {
event.unsubscribe(this);
}
}

void onTopicPublished(Topic topic);

Topic[] getSubscription();
}
}

Carregando…
Cancelar
Guardar