From 98825a64301a2953025903fa6c0cc62869bbbadb Mon Sep 17 00:00:00 2001
From: Thinkofdeath <thethinkofdeath@gmail.com>
Date: Wed, 9 Apr 2014 14:54:31 +0100
Subject: [PATCH] Close the inputstreams/connections used for head conversion

---
 .../0129-Convert-player-heads-async.patch     | 43 ++++++++++++++-----
 1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/CraftBukkit-Patches/0129-Convert-player-heads-async.patch b/CraftBukkit-Patches/0129-Convert-player-heads-async.patch
index ef2c373428..4aae9e7b44 100644
--- a/CraftBukkit-Patches/0129-Convert-player-heads-async.patch
+++ b/CraftBukkit-Patches/0129-Convert-player-heads-async.patch
@@ -1,4 +1,4 @@
-From 127178fe81c99ba39c9bf3fb1a8d89c192bd1b41 Mon Sep 17 00:00:00 2001
+From d303eb8ffc3f82badc690c1bad71782f0d5f7b57 Mon Sep 17 00:00:00 2001
 From: Thinkofdeath <thethinkofdeath@gmail.com>
 Date: Wed, 9 Apr 2014 13:29:57 +0100
 Subject: [PATCH] Convert player heads async
@@ -112,10 +112,10 @@ index b241cfe..925e017 100644
      public Packet getUpdatePacket() {
 diff --git a/src/main/java/org/spigotmc/HeadConverter.java b/src/main/java/org/spigotmc/HeadConverter.java
 new file mode 100644
-index 0000000..0f465f0
+index 0000000..bc949a1
 --- /dev/null
 +++ b/src/main/java/org/spigotmc/HeadConverter.java
-@@ -0,0 +1,140 @@
+@@ -0,0 +1,163 @@
 +package org.spigotmc;
 +
 +import com.google.common.base.Charsets;
@@ -128,7 +128,6 @@ index 0000000..0f465f0
 +import net.minecraft.server.MinecraftServer;
 +import net.minecraft.server.NBTTagCompound;
 +import net.minecraft.server.NBTTagList;
-+import net.minecraft.server.PacketPlayOutTileEntityData;
 +import net.minecraft.server.TileEntitySkull;
 +import net.minecraft.util.com.mojang.authlib.GameProfile;
 +import org.bukkit.Bukkit;
@@ -162,7 +161,8 @@ index 0000000..0f465f0
 +        final String name = head.getExtraType();
 +        final NBTTagCompound tag = new NBTTagCompound();
 +        head.b( tag );
-+        if ( tag.hasKey( "Owner" ) && tag.getCompound( "Owner" ).hasKey( "Properties" ) ) {
++        if ( tag.hasKey( "Owner" ) && tag.getCompound( "Owner" ).hasKey( "Properties" ) )
++        {
 +            return;
 +        }
 +
@@ -171,12 +171,13 @@ index 0000000..0f465f0
 +            @Override
 +            public void run()
 +            {
++                HttpURLConnection connection = null;
 +                try
 +                {
 +                    // Firstly convert name -> uuid
 +                    URL accountsAPI = new URL( "https://api.mojang.com/profiles/page/1" );
 +
-+                    HttpURLConnection connection = (HttpURLConnection) accountsAPI.openConnection();
++                    connection = (HttpURLConnection) accountsAPI.openConnection();
 +                    connection.setRequestProperty( "Content-Type", "application/json" );
 +                    connection.setRequestMethod( "POST" );
 +                    connection.setDoInput( true );
@@ -188,8 +189,16 @@ index 0000000..0f465f0
 +                    outputStream.flush();
 +                    outputStream.close();
 +
-+                    JsonObject response = new JsonParser().parse( new InputStreamReader( connection.getInputStream() ) )
-+                            .getAsJsonObject();
++                    InputStreamReader inputStreamReader = new InputStreamReader( connection.getInputStream() );
++                    JsonObject response;
++                    try
++                    {
++                        response = new JsonParser().parse( inputStreamReader )
++                                .getAsJsonObject();
++                    } finally
++                    {
++                        inputStreamReader.close();
++                    }
 +                    if ( response.get( "size" ).getAsInt() != 1 )
 +                    {
 +                        return;
@@ -208,10 +217,18 @@ index 0000000..0f465f0
 +                    // Now to lookup the textures
 +
 +                    URL url = new URL( "https://sessionserver.mojang.com/session/minecraft/profile/" + uuid );
++                    connection.disconnect();
 +                    connection = (HttpURLConnection) url.openConnection();
 +                    connection.setDoOutput( true );
-+                    response = new JsonParser().parse( new InputStreamReader( connection.getInputStream() ) )
-+                            .getAsJsonObject();
++                    inputStreamReader = new InputStreamReader( connection.getInputStream() );
++                    try
++                    {
++                        response = new JsonParser().parse( inputStreamReader )
++                                .getAsJsonObject();
++                    } finally
++                    {
++                        inputStreamReader.close();
++                    }
 +
 +                    if ( !response.has( "properties" ) )
 +                    {
@@ -251,6 +268,12 @@ index 0000000..0f465f0
 +                } catch ( IOException e )
 +                {
 +                    Bukkit.getLogger().warning( "Error connecting to Mojang servers, cannot convert player heads" );
++                } finally
++                {
++                    if ( connection != null )
++                    {
++                        connection.disconnect();
++                    }
 +                }
 +            }
 +        } );