Skip to content

Commit ce5a7d6

Browse files
committed
Fix memory leak when writing to buffer for logs (BGHDDevelopment#5)
This fixes BGHDDevelopment#5
1 parent 4c1bbac commit ce5a7d6

File tree

2 files changed

+24
-37
lines changed

2 files changed

+24
-37
lines changed

balancer/src/main/java/com/jaimemartz/playerbalancer/PlayerBalancer.java

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@
2626
import java.net.URL;
2727
import java.net.URLConnection;
2828
import java.nio.file.Files;
29-
import java.util.logging.Handler;
29+
import java.util.logging.FileHandler;
3030
import java.util.logging.Level;
31-
import java.util.logging.LogRecord;
3231

3332
public class PlayerBalancer extends Plugin {
3433
private boolean failed = false;
@@ -37,37 +36,23 @@ public class PlayerBalancer extends Plugin {
3736
private SectionManager sectionManager;
3837
private NetworkManager networkManager;
3938
private ConfigurationLoader<CommentedConfigurationNode> loader;
40-
private final StringBuilder logsBuilder = new StringBuilder();
4139

4240
private FallbackCommand fallbackCommand;
43-
private Command mainCommand, manageCommand, findCommand, listCommand, serverCommand;
41+
private Command mainCommand, manageCommand;
4442
private Listener connectListener, kickListener, reloadListener, pluginMessageListener;
4543

44+
public static final String LOG_FILE_PATTERN = "balancer.log";
45+
4646
@Override
4747
public void onLoad() {
48-
Handler handler = new Handler() {
49-
@Override
50-
public void publish(LogRecord record) {
51-
if (isLoggable(record)) {
52-
String formatted = getFormatter().format(record);
53-
logsBuilder.append(formatted);
54-
}
55-
}
56-
57-
@Override
58-
public void flush() {
59-
logsBuilder.setLength(0);
60-
}
61-
62-
@Override
63-
public void close() throws SecurityException {
64-
//Nothing to do
65-
}
66-
};
67-
68-
handler.setFormatter(new CustomFormatter());
69-
getProxy().getLogger().addHandler(handler);
70-
getProxy().getLogger().setUseParentHandlers(true);
48+
try {
49+
FileHandler handler = new FileHandler(LOG_FILE_PATTERN);
50+
handler.setFormatter(new CustomFormatter());
51+
getProxy().getLogger().addHandler(handler);
52+
getProxy().getLogger().setUseParentHandlers(true);
53+
} catch (Exception e) {
54+
getLogger().log(Level.WARNING, "Could not set custom log handler", e);
55+
}
7156
}
7257

7358
@Override
@@ -305,8 +290,4 @@ public NetworkManager getNetworkManager() {
305290
public FallbackCommand getFallbackCommand() {
306291
return fallbackCommand;
307292
}
308-
309-
public StringBuilder getLogsBuilder() {
310-
return logsBuilder;
311-
}
312293
}

balancer/src/main/java/com/jaimemartz/playerbalancer/helper/PasteHelper.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@
1414
import java.io.FileInputStream;
1515
import java.io.InputStreamReader;
1616
import java.net.URL;
17+
import java.nio.charset.StandardCharsets;
1718
import java.util.function.BiConsumer;
1819

20+
import static com.jaimemartz.playerbalancer.PlayerBalancer.LOG_FILE_PATTERN;
21+
1922
public enum PasteHelper {
2023
PLUGIN((sender, address) -> {
2124
if (sender instanceof ProxiedPlayer) {
@@ -56,7 +59,7 @@ public URL paste(PlayerBalancer plugin) throws Exception {
5659
public URL paste(PlayerBalancer plugin) throws Exception {
5760
File file = new File("config.yml");
5861
try (FileInputStream stream = new FileInputStream(file)) {
59-
try (InputStreamReader reader = new InputStreamReader(stream, "UTF-8")) {
62+
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
6063
String content = CharStreams.toString(reader);
6164
content = content.replaceAll("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}", "?.?.?.?");
6265
HastebinPaste paste = new HastebinPaste("https://file.properties/paste/", content);
@@ -79,11 +82,14 @@ public URL paste(PlayerBalancer plugin) throws Exception {
7982
}, false) {
8083
@Override
8184
public URL paste(PlayerBalancer plugin) throws Exception {
82-
HastebinPaste paste = new HastebinPaste("https://file.properties/paste/",
83-
plugin.getLogsBuilder().toString()
84-
);
85-
86-
return paste.paste();
85+
File file = new File(LOG_FILE_PATTERN);
86+
try (FileInputStream stream = new FileInputStream(file)) {
87+
try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)) {
88+
String content = CharStreams.toString(reader);
89+
HastebinPaste paste = new HastebinPaste("https://file.properties/paste/", content);
90+
return paste.paste();
91+
}
92+
}
8793
}
8894
};
8995

0 commit comments

Comments
 (0)