I found the exactly same problem happening. This is not fixed in 3.1.0 beta. It looks to me in the disconnect() method one should first stop/destroy the packet reader thread (the one runs parsePackets()) to release its lock on the java.io.InputStreamReader. I hope this get fixed in 3.1.0 RC1. Here is the thread dump:
[java] Full thread dump Java HotSpot™ 64-Bit Server VM (1.5.0_07-b03 mixed mode):
[java]
[java] “Smack Packet Reader (12215)” daemon prio=1 tid=0x00002aaaf89a2f30 nid=0x3be9 runnable [0x0000000048ae0000…0x0000000048ae0d10]
[java] at java.net.SocketInputStream.socketRead0(Native Method)
[java] at java.net.SocketInputStream.read(SocketInputStream.java:129)
[java] at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
[java] at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
[java] at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
[java] - locked <0x00002aaae184d920> (a java.io.InputStreamReader)
[java] at java.io.InputStreamReader.read(InputStreamReader.java:167)
[java] at java.io.BufferedReader.fill(BufferedReader.java:136)
[java] at java.io.BufferedReader.read1(BufferedReader.java:187)
[java] at java.io.BufferedReader.read(BufferedReader.java:261)
[java] - locked <0x00002aaae184d920> (a java.io.InputStreamReader)
[java] at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2972)
[java] at org.xmlpull.mxp1.MXParser.more(MXParser.java:3026)
[java] at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1144)
[java] at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
[java] at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:368)
[java] at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
[java] at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
[java]
[java] “main” prio=1 tid=0x000000004011bb30 nid=0x72fa waiting for monitor entry [0x00007fff3fa24000…0x00007fff3fa24b10]
[java] at java.io.BufferedReader.close(BufferedReader.java:500)
[java] - waiting to lock <0x00002aaae184d920> (a java.io.InputStreamReader)
[java] at org.jivesoftware.smack.XMPPConnection.shutdown(XMPPConnection.java:583)
[java] at org.jivesoftware.smack.XMPPConnection.disconnect(XMPPConnection.java:643)
[java] at org.jivesoftware.smack.XMPPConnection.disconnect(XMPPConnection.java:618)
[java] at com.gaocan.im.server.ImConnectionPool.closeConnection(ImConnectionPool.java:114 )