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));
//LOGGER.log(Level.INFO, configFile + " prepared for writing in " + (System.nanoTime() - startTime) + " nsec.");
return future;
}
@ -351,16 +351,23 @@ public class EssentialsConf extends YamlConfiguration
}
}
final OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(configFile), UTF8);
final FileOutputStream fos = new FileOutputStream(configFile);
try
{
writer.write(data);
final OutputStreamWriter writer = new OutputStreamWriter(fos, UTF8);
try
{
writer.write(data);
}
finally
{
writer.close();
}
}
finally
{
writer.close();
fos.close();
}
}
catch (IOException e)
@ -753,4 +760,5 @@ public class EssentialsConf extends YamlConfiguration
{
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
{
private CommandSender replyTo = null;
private transient User teleportRequester;
private transient String teleportRequester;
private transient boolean teleportRequestHere;
private transient boolean vanished;
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)
{
teleportRequestTime = System.currentTimeMillis();
teleportRequester = player;
teleportRequester = player.getName();
teleportRequestHere = here;
}
public User getTeleportRequest()
public String getTeleportRequest()
{
return teleportRequester;
}

View File

@ -12,7 +12,7 @@ import org.bukkit.inventory.ItemStack;
public abstract class UserData extends PlayerExtension implements IConf
{
protected final transient IEssentials ess;
private EssentialsConf config;
private final EssentialsConf config;
private final File folder;
protected UserData(Player base, IEssentials ess)
@ -31,8 +31,7 @@ public abstract class UserData extends PlayerExtension implements IConf
public final void reset()
{
config.getFile().delete();
config = new EssentialsConf(new File(folder, Util.sanitizeFileName(base.getName()) + ".yml"));
reloadConfig();
ess.getUserMap().removeUser(this.getName());
}
@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
{
final User target = user.getTeleportRequest();
final User target = ess.getUser(user.getTeleportRequest());
if (target == null || !target.isOnline())
{

View File

@ -15,7 +15,7 @@ public class Commandtpdeny extends EssentialsCommand
@Override
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)
{
throw new Exception(_("noPendingRequest"));

View File

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