Fixed memory leak

This commit is contained in:
Loki 2012-05-06 16:12:09 +04:00
parent 40fda24615
commit 9de37bea5a
5 changed files with 91 additions and 63 deletions

View file

@ -97,6 +97,9 @@ public class TablesPanel extends javax.swing.JPanel {
initComponents(); initComponents();
// disable replays
chkShowCompleted.setVisible(false);
tableTables.createDefaultColumnsFromModel(); tableTables.createDefaultColumnsFromModel();
chatPanel.useExtendedView(ChatPanel.VIEW_MODE.NONE); chatPanel.useExtendedView(ChatPanel.VIEW_MODE.NONE);
chatPanel.setBorder(null); chatPanel.setBorder(null);

View file

@ -52,7 +52,6 @@ import mage.server.challenge.ChallengeManager;
import mage.server.draft.DraftManager; import mage.server.draft.DraftManager;
import mage.server.game.*; import mage.server.game.*;
import mage.server.services.LogKeys; import mage.server.services.LogKeys;
import mage.server.services.LogService;
import mage.server.services.impl.LogServiceImpl; import mage.server.services.impl.LogServiceImpl;
import mage.server.tournament.TournamentFactory; import mage.server.tournament.TournamentFactory;
import mage.server.tournament.TournamentManager; import mage.server.tournament.TournamentManager;
@ -432,9 +431,12 @@ public class TableController {
cancelTimeout(); cancelTimeout();
startGame(choosingPlayerId); startGame(choosingPlayerId);
} }
// else { else {
// GamesRoomManager.getInstance().removeTable(table.getId()); GamesRoomManager.getInstance().removeTable(table.getId());
// } match.getGames().clear();
match = null;
table = null;
}
} catch (GameException ex) { } catch (GameException ex) {
logger.fatal(null, ex); logger.fatal(null, ex);
} }

View file

@ -72,7 +72,7 @@ public class LoadTest {
/** /**
* Determines how many times test will be executed in a row. * Determines how many times test will be executed in a row.
*/ */
private static final int EXECUTION_COUNT_PLAY_GAME = 1; private static final int EXECUTION_COUNT_PLAY_GAME = 100;
/** /**
* Tests connecting with two players, creating game and starting it. * Tests connecting with two players, creating game and starting it.
@ -128,18 +128,38 @@ public class LoadTest {
} }
} }
/**
* Tests 10 simple games played one after another.
*/
@Test
@Ignore
public void testSimpleGame() throws Exception {
final DeckCardLists deckList = createDeck();
for (int i = 0; i < EXECUTION_COUNT_PLAY_GAME; i++) {
final int j = i;
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
testSimpleGame0(deckList, j);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
t.join();
}
}
/** /**
* Tests simple game till the end (game over). * Tests simple game till the end (game over).
* Players do nothing but skip phases and discard cards at the end. * Players do nothing but skip phases and discard cards at the end.
* *
* This results in a game that lasts until there is no cards in library. * This results in a game that lasts until there is no cards in library.
*/ */
@Test private boolean testSimpleGame0(DeckCardLists deckList, int i) throws InterruptedException {
@Ignore
public void testSimpleGame() throws Exception {
DeckCardLists deckList = createDeck();
for (int i = 0; i < EXECUTION_COUNT_PLAY_GAME; i++) {
Connection connection = createConnection(TEST_USER_NAME + i); Connection connection = createConnection(TEST_USER_NAME + i);
SimpleMageClient mageClient = new SimpleMageClient(); SimpleMageClient mageClient = new SimpleMageClient();
@ -159,7 +179,7 @@ public class LoadTest {
if (!session.joinTable(roomId, table.getTableId(), TEST_USER_NAME + i, "Human", 1, deckList)) { if (!session.joinTable(roomId, table.getTableId(), TEST_USER_NAME + i, "Human", 1, deckList)) {
log.error("Error while joining table"); log.error("Error while joining table");
Assert.assertTrue("Error while joining table", false); Assert.assertTrue("Error while joining table", false);
return; return true;
} }
/*** Connect with a second player ***/ /*** Connect with a second player ***/
@ -175,7 +195,7 @@ public class LoadTest {
if (!session2.joinTable(roomId2, table.getTableId(), TEST_USER_NAME_2 + i, "Human", 1, deckList)) { if (!session2.joinTable(roomId2, table.getTableId(), TEST_USER_NAME_2 + i, "Human", 1, deckList)) {
log.error("Error while joining table"); log.error("Error while joining table");
Assert.assertTrue("Error while joining table", false); Assert.assertTrue("Error while joining table", false);
return; return true;
} }
/*** Start game ***/ /*** Start game ***/
@ -184,7 +204,7 @@ public class LoadTest {
while (!mageClient.isGameOver()) { while (!mageClient.isGameOver()) {
Thread.sleep(1000); Thread.sleep(1000);
} }
} return false;
} }
/** /**

View file

@ -386,7 +386,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
scorePlayer = state.getPlayers().values().iterator().next(); scorePlayer = state.getPlayers().values().iterator().next();
init(choosingPlayerId, options); init(choosingPlayerId, options);
play(startingPlayerId); play(startingPlayerId);
saveState(); //saveState();
} }
@Override @Override
@ -448,7 +448,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
player.beginTurn(this); player.beginTurn(this);
} }
fireInformEvent("game has started"); fireInformEvent("game has started");
saveState(); //saveState();
//20091005 - 103.1 //20091005 - 103.1
if (!gameOptions.skipInitShuffling) { //don't shuffle in test mode for card injection on top of player's libraries if (!gameOptions.skipInitShuffling) { //don't shuffle in test mode for card injection on top of player's libraries
@ -476,7 +476,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
return; return;
} }
saveState(); //saveState();
//20091005 - 103.3 //20091005 - 103.3
for (UUID playerId: state.getPlayerList(startingPlayerId)) { for (UUID playerId: state.getPlayerList(startingPlayerId)) {
@ -496,7 +496,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
mulligan(player.getId()); mulligan(player.getId());
} }
fireInformEvent(player.getName() + " keeps hand"); fireInformEvent(player.getName() + " keeps hand");
saveState(); //saveState();
} }
for (UUID playerId : state.getPlayerList(startingPlayerId)) { for (UUID playerId : state.getPlayerList(startingPlayerId)) {
@ -627,8 +627,8 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
Player player; Player player;
while (!isPaused() && !isGameOver()) { while (!isPaused() && !isGameOver()) {
try { try {
if (bookmark == 0) //if (bookmark == 0)
bookmark = bookmarkState(); //bookmark = bookmarkState();
player = getPlayer(state.getPlayerList().get()); player = getPlayer(state.getPlayerList().get());
state.setPriorityPlayerId(player.getId()); state.setPriorityPlayerId(player.getId());
while (!player.isPassed() && !player.hasLost() && !player.hasLeft() && !isPaused() && !isGameOver()) { while (!player.isPassed() && !player.hasLost() && !player.hasLeft() && !isPaused() && !isGameOver()) {
@ -654,7 +654,7 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
state.getRevealed().reset(); state.getRevealed().reset();
break; break;
} else { } else {
removeBookmark(bookmark); //removeBookmark(bookmark);
return; return;
} }
} }
@ -662,13 +662,13 @@ public abstract class GameImpl<T extends GameImpl<T>> implements Game, Serializa
catch (Exception ex) { catch (Exception ex) {
logger.fatal("Game exception ", ex); logger.fatal("Game exception ", ex);
this.fireErrorEvent("Game exception occurred: ", ex); this.fireErrorEvent("Game exception occurred: ", ex);
restoreState(bookmark); //restoreState(bookmark);
bookmark = 0; bookmark = 0;
continue; continue;
} }
state.getPlayerList().getNext(); state.getPlayerList().getNext();
} }
removeBookmark(bookmark); //removeBookmark(bookmark);
bookmark = 0; bookmark = 0;
} }
} catch (Exception ex) { } catch (Exception ex) {

View file

@ -28,15 +28,16 @@
package mage.game.turn; package mage.game.turn;
import mage.Constants.PhaseStep;
import mage.Constants.TurnPhase;
import mage.game.Game;
import mage.players.Player;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import mage.Constants.PhaseStep;
import mage.Constants.TurnPhase;
import mage.game.Game;
import mage.players.Player;
/** /**
* *
@ -121,7 +122,9 @@ public class Turn implements Serializable {
if (phase.play(game, activePlayerId)) { if (phase.play(game, activePlayerId)) {
//20091005 - 500.4/703.4n //20091005 - 500.4/703.4n
game.emptyManaPools(); game.emptyManaPools();
game.saveState();
//game.saveState();
//20091005 - 500.8 //20091005 - 500.8
playExtraPhases(game, phase.getType()); playExtraPhases(game, phase.getType());
} }