浏览代码

BETA: Resource leaks fixes.

Zoey76 13 年之前
父节点
当前提交
c72ccb6b31

+ 7 - 8
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/L2Event.java

@@ -14,11 +14,8 @@
  */
 package com.l2jserver.gameserver.model.entity;
 
-import java.io.BufferedInputStream;
 import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
+import java.io.FileReader;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -366,10 +363,12 @@ public class L2Event
 			if (NpcTable.getInstance().getTemplate(_npcId) == null)
 				return "Cannot start event, invalid npc id.";
 			
-			DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(Config.DATAPACK_ROOT+"/data/events/" + _eventName)));
-			BufferedReader inbr = new BufferedReader(new InputStreamReader(in));
-			_eventCreator = inbr.readLine();
-			_eventInfo = inbr.readLine();
+			try (FileReader fr = new FileReader(Config.DATAPACK_ROOT + "/data/events/" + _eventName);
+				BufferedReader br = new BufferedReader(fr))
+			{
+				_eventCreator = br.readLine();
+				_eventInfo = br.readLine();
+			}
 			
 			List<L2PcInstance> temp = new FastList<>();
 			for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())

+ 1 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/model/itemauction/ItemAuctionInstance.java

@@ -569,6 +569,7 @@ public final class ItemAuctionInstance
 			final long startingTime = rset.getLong(2);
 			final long endingTime = rset.getLong(3);
 			final byte auctionStateId = rset.getByte(4);
+			rset.close();
 			statement.close();
 			
 			if (startingTime >= endingTime)

+ 3 - 2
L2J_Server_BETA/java/com/l2jserver/loginserver/GameServerTable.java

@@ -78,10 +78,11 @@ public final class GameServerTable
 	private void loadGameServerNames()
 	{
 		final File xml = new File(Config.DATAPACK_ROOT, "data/servername.xml");
-		try (InputStream in = new FileInputStream(xml);)
+		try (InputStream in = new FileInputStream(xml);
+			UTF8StreamReader utf8 = new UTF8StreamReader())
 		{
 			final XMLStreamReaderImpl xpp = new XMLStreamReaderImpl();
-			xpp.setInput(new UTF8StreamReader().setInput(in));
+			xpp.setInput(utf8.setInput(in));
 			for (int e = xpp.getEventType(); e != XMLStreamConstants.END_DOCUMENT; e = xpp.next())
 			{
 				if (e == XMLStreamConstants.START_ELEMENT)

+ 42 - 39
L2J_Server_BETA/java/com/l2jserver/tools/dbinstaller/console/DBInstallerConsole.java

@@ -33,45 +33,46 @@ public class DBInstallerConsole implements DBOutputInterface
 	{
 		System.out.println("Welcome to L2J DataBase installer");
 		Preferences prop = Preferences.userRoot();
-		Scanner scn = new Scanner(System.in);
-		while (_con == null)
-		{
-			System.out.printf("%s (%s): ", "Host", prop.get("dbHost_" + db, "localhost"));
-			String dbHost = scn.nextLine();
-			System.out.printf("%s (%s): ", "Port", prop.get("dbPort_" + db, "3306"));
-			String dbPort = scn.nextLine();
-			System.out.printf("%s (%s): ", "Username", prop.get("dbUser_" + db, "root"));
-			String dbUser = scn.nextLine();
-			System.out.printf("%s (%s): ", "Password", "");
-			String dbPass = scn.nextLine();
-			System.out.printf("%s (%s): ", "Database", prop.get("dbDbse_" + db, db));
-			String dbDbse = scn.nextLine();
-			
-			dbHost = dbHost.isEmpty() ? prop.get("dbHost_" + db, "localhost") : dbHost;
-			dbPort = dbPort.isEmpty() ? prop.get("dbPort_" + db, "3306") : dbPort;
-			dbUser = dbUser.isEmpty() ? prop.get("dbUser_" + db, "root") : dbUser;
-			dbDbse = dbDbse.isEmpty() ? prop.get("dbDbse_" + db, db) : dbDbse;
-			
-			MySqlConnect connector = new MySqlConnect(dbHost, dbPort, dbUser, dbPass, dbDbse, true);
-			
-			_con = connector.getConnection();
-		}
-		
 		RunTasks rt = null;
-		
-		System.out.print("(C)lean install, (U)pdate or (E)xit? ");
-		String resp = scn.next();
-		if (resp.equalsIgnoreCase("c"))
+		try (Scanner scn = new Scanner(System.in))
 		{
-			System.out.print("Do you really want to destroy your db (Y/N)?");
-			if (scn.next().equalsIgnoreCase("y"))
+			while (_con == null)
 			{
-				rt = new RunTasks(this, db, dir, cleanUp, true);
+				System.out.printf("%s (%s): ", "Host", prop.get("dbHost_" + db, "localhost"));
+				String dbHost = scn.nextLine();
+				System.out.printf("%s (%s): ", "Port", prop.get("dbPort_" + db, "3306"));
+				String dbPort = scn.nextLine();
+				System.out.printf("%s (%s): ", "Username", prop.get("dbUser_" + db, "root"));
+				String dbUser = scn.nextLine();
+				System.out.printf("%s (%s): ", "Password", "");
+				String dbPass = scn.nextLine();
+				System.out.printf("%s (%s): ", "Database", prop.get("dbDbse_" + db, db));
+				String dbDbse = scn.nextLine();
+				
+				dbHost = dbHost.isEmpty() ? prop.get("dbHost_" + db, "localhost") : dbHost;
+				dbPort = dbPort.isEmpty() ? prop.get("dbPort_" + db, "3306") : dbPort;
+				dbUser = dbUser.isEmpty() ? prop.get("dbUser_" + db, "root") : dbUser;
+				dbDbse = dbDbse.isEmpty() ? prop.get("dbDbse_" + db, db) : dbDbse;
+				
+				MySqlConnect connector = new MySqlConnect(dbHost, dbPort, dbUser, dbPass, dbDbse, true);
+				
+				_con = connector.getConnection();
+			}
+			
+			System.out.print("(C)lean install, (U)pdate or (E)xit? ");
+			String resp = scn.next();
+			if (resp.equalsIgnoreCase("c"))
+			{
+				System.out.print("Do you really want to destroy your db (Y/N)?");
+				if (scn.next().equalsIgnoreCase("y"))
+				{
+					rt = new RunTasks(this, db, dir, cleanUp, true);
+				}
+			}
+			else if (resp.equalsIgnoreCase("u"))
+			{
+				rt = new RunTasks(this, db, dir, cleanUp, false);
 			}
-		}
-		else if (resp.equalsIgnoreCase("u"))
-		{
-			rt = new RunTasks(this, db, dir, cleanUp, false);
 		}
 		
 		if (rt != null)
@@ -120,11 +121,13 @@ public class DBInstallerConsole implements DBOutputInterface
 	public int requestConfirm(String title, String message, int type)
 	{
 		System.out.print(message);
-		Scanner scn = new Scanner(System.in);
-		String res = scn.next();
-		if (res.equalsIgnoreCase("y"))
+		try (Scanner scn = new Scanner(System.in))
 		{
-			return 0;
+			String res = scn.next();
+			if (res.equalsIgnoreCase("y"))
+			{
+				return 0;
+			}
 		}
 		return 1;
 	}

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/tools/dbinstaller/util/mysql/DBDumper.java

@@ -45,10 +45,9 @@ public class DBDumper
 	
 	public void createDump()
 	{
-		try
+		try (Formatter form = new Formatter())
 		{
 			Connection con = _frame.getConnection();
-			Formatter form = new Formatter();
 			PreparedStatement stmt = con.prepareStatement("SHOW TABLES");
 			ResultSet rset = stmt.executeQuery();
 			File dump = new File("dumps", form.format("%1$s_dump_%2$tY%2$tm%2$td-%2$tH%2$tM%2$tS.sql", _db, new GregorianCalendar().getTime()).toString());

+ 3 - 2
L2J_Server_BETA/java/com/l2jserver/tools/dbinstaller/util/mysql/MySqlConnect.java

@@ -31,10 +31,11 @@ public class MySqlConnect
 	
 	public MySqlConnect(String host, String port, String user, String password, String db, boolean console)
 	{
-		try
+		try (Formatter form = new Formatter())
 		{
 			Class.forName("com.mysql.jdbc.Driver").newInstance();
-			con = DriverManager.getConnection(new Formatter().format("jdbc:mysql://%1$s:%2$s", host, port).toString(), user, password);
+			final String formattedText = form.format("jdbc:mysql://%1$s:%2$s", host, port).toString();
+			con = DriverManager.getConnection(formattedText, user, password);
 			
 			Statement st = con.createStatement();
 			st.execute("CREATE DATABASE IF NOT EXISTS `" + db + "`");

+ 6 - 2
L2J_Server_BETA/java/com/l2jserver/tools/ngl/ConsoleLocalizator.java

@@ -204,8 +204,12 @@ public class ConsoleLocalizator extends LocalizationParser
 	 */
 	private String formatText(String text, Object... args)
 	{
-		Formatter form = new Formatter();
-		return form.format(text, args).toString();
+		String formattedText = null;
+		try (Formatter form = new Formatter())
+		{
+			formattedText = form.format(text, args).toString();
+		}
+		return formattedText;
 	}
 	
 	/**

+ 3 - 1
L2J_Server_BETA/java/com/l2jserver/util/Base64.java

@@ -344,7 +344,9 @@ public class Base64
 		byte[] value = null;
 		try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
 			Base64.OutputStream b64os = new Base64.OutputStream(baos, ENCODE | dontBreakLines);
-			ObjectOutputStream oos = new ObjectOutputStream((gzip == GZIP) ? new GZIPOutputStream(b64os) : b64os))
+			GZIPOutputStream gzipOutputStream = new GZIPOutputStream(b64os);
+			FilterOutputStream os = (gzip == GZIP) ? gzipOutputStream : b64os;
+			ObjectOutputStream oos = new ObjectOutputStream(os))
 		{
 			oos.writeObject(serializableObject);
 			value = baos.toByteArray();