Performance: fixed memory leaks on each card viewer or draft open (10 Mb per call, related to #11285, fixes #9548)

This commit is contained in:
Oleg Agafonov 2023-10-14 12:38:32 +04:00
parent ce311fd691
commit 36ccfb0a2a
13 changed files with 44 additions and 10 deletions

View file

@ -62,10 +62,19 @@ public enum ExpansionRepository {
}
/**
* Warning, don't forget to unsubscribe due memory leak problems
*
* @param listener
*/
public void subscribe(Listener<RepositoryEvent> listener) {
eventSource.addListener(listener);
}
public void unsubscribe(Listener<RepositoryEvent> listener) {
eventSource.removeListener(listener);
}
public void saveSets(final List<ExpansionInfo> newSets, final List<ExpansionInfo> updatedSets, long newContentVersion) {
try {
expansionDao.callBatchTasks(() -> {

View file

@ -20,7 +20,12 @@ public class RepositoryEventSource implements EventSource<RepositoryEvent>, Seri
}
@Override
public void removeAllListener() {
public void removeListener(Listener<RepositoryEvent> listener) {
dispatcher.removeListener(listener);
}
@Override
public void removeAllListeners() {
dispatcher.removeAllListener();
}

View file

@ -1,17 +1,17 @@
package mage.game.events;
import java.io.Serializable;
/**
*
* TODO: there are duplicated interfaces of EventSource, must combine in single
* @author BetaSteward_at_googlemail.com
* @param <E>
*/
public interface EventSource<E extends ExternalEvent> extends Serializable {
void addListener(Listener<E> listener);
void removeListener(Listener<E> listener);
void removeAllListener();
void removeAllListeners();
}

View file

@ -29,7 +29,12 @@ public class PlayerQueryEventSource implements EventSource<PlayerQueryEvent>, Se
}
@Override
public void removeAllListener() {
public void removeListener(Listener<PlayerQueryEvent> listener) {
dispatcher.removeListener(listener);
}
@Override
public void removeAllListeners() {
dispatcher.removeAllListener();
}

View file

@ -26,7 +26,12 @@ public class TableEventSource implements EventSource<TableEvent>, Serializable {
}
@Override
public void removeAllListener() {
public void removeListener(Listener<TableEvent> listener) {
dispatcher.removeListener(listener);
}
@Override
public void removeAllListeners() {
dispatcher.removeAllListener();
}