Fix cleanup to not hold Users in memory.

This commit is contained in:
snowleo 2013-05-03 00:12:40 +02:00
parent ebc6b14284
commit 555a300378
6 changed files with 22 additions and 15 deletions

View file

@ -297,7 +297,7 @@ public class EssentialsConf extends YamlConfiguration
Future<?> future = EXECUTOR_SERVICE.submit(new WriteRunner(configFile, data, pendingDiskWrites)); Future<?> future = EXECUTOR_SERVICE.submit(new WriteRunner(configFile, data, pendingDiskWrites));
//LOGGER.log(Level.INFO, configFile + " prepared for writing in " + (System.nanoTime() - startTime) + " nsec."); //LOGGER.log(Level.INFO, configFile + " prepared for writing in " + (System.nanoTime() - startTime) + " nsec.");
return future; return future;
} }
@ -351,16 +351,23 @@ public class EssentialsConf extends YamlConfiguration
} }
} }
final FileOutputStream fos = new FileOutputStream(configFile);
final OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(configFile), UTF8);
try try
{ {
writer.write(data); final OutputStreamWriter writer = new OutputStreamWriter(fos, UTF8);
try
{
writer.write(data);
}
finally
{
writer.close();
}
} }
finally finally
{ {
writer.close(); fos.close();
} }
} }
catch (IOException e) catch (IOException e)
@ -753,4 +760,5 @@ public class EssentialsConf extends YamlConfiguration
{ {
super.set(path, value); super.set(path, value);
} }
} }

View file

@ -19,7 +19,7 @@ import org.bukkit.potion.PotionEffectType;
public class User extends UserData implements Comparable<User>, IReplyTo, IUser public class User extends UserData implements Comparable<User>, IReplyTo, IUser
{ {
private CommandSender replyTo = null; private CommandSender replyTo = null;
private transient User teleportRequester; private transient String teleportRequester;
private transient boolean teleportRequestHere; private transient boolean teleportRequestHere;
private transient boolean vanished; private transient boolean vanished;
private transient final Teleport teleport; private transient final Teleport teleport;
@ -263,11 +263,11 @@ public class User extends UserData implements Comparable<User>, IReplyTo, IUser
public void requestTeleport(final User player, final boolean here) public void requestTeleport(final User player, final boolean here)
{ {
teleportRequestTime = System.currentTimeMillis(); teleportRequestTime = System.currentTimeMillis();
teleportRequester = player; teleportRequester = player.getName();
teleportRequestHere = here; teleportRequestHere = here;
} }
public User getTeleportRequest() public String getTeleportRequest()
{ {
return teleportRequester; return teleportRequester;
} }

View file

@ -12,7 +12,7 @@ import org.bukkit.inventory.ItemStack;
public abstract class UserData extends PlayerExtension implements IConf public abstract class UserData extends PlayerExtension implements IConf
{ {
protected final transient IEssentials ess; protected final transient IEssentials ess;
private EssentialsConf config; private final EssentialsConf config;
private final File folder; private final File folder;
protected UserData(Player base, IEssentials ess) protected UserData(Player base, IEssentials ess)
@ -31,8 +31,7 @@ public abstract class UserData extends PlayerExtension implements IConf
public final void reset() public final void reset()
{ {
config.getFile().delete(); config.getFile().delete();
config = new EssentialsConf(new File(folder, Util.sanitizeFileName(base.getName()) + ".yml")); ess.getUserMap().removeUser(this.getName());
reloadConfig();
} }
@Override @Override

View file

@ -19,7 +19,7 @@ public class Commandtpaccept extends EssentialsCommand
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
final User target = user.getTeleportRequest(); final User target = ess.getUser(user.getTeleportRequest());
if (target == null || !target.isOnline()) if (target == null || !target.isOnline())
{ {

View file

@ -15,7 +15,7 @@ public class Commandtpdeny extends EssentialsCommand
@Override @Override
public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception
{ {
final User player = user.getTeleportRequest(); final User player = ess.getUser(user.getTeleportRequest());
if (player == null) if (player == null)
{ {
throw new Exception(_("noPendingRequest")); throw new Exception(_("noPendingRequest"));

View file

@ -29,7 +29,7 @@ public class EssentialsGeoIPPlayerListener implements Listener, IConf
private static final Logger logger = Logger.getLogger("Minecraft"); private static final Logger logger = Logger.getLogger("Minecraft");
File databaseFile; File databaseFile;
File dataFolder; File dataFolder;
EssentialsConf config; final EssentialsConf config;
private final transient IEssentials ess; private final transient IEssentials ess;
public EssentialsGeoIPPlayerListener(File dataFolder, IEssentials ess) public EssentialsGeoIPPlayerListener(File dataFolder, IEssentials ess)