Open GoogleCodeExporter opened 9 years ago
Does that still happen? Any way I can get a thread dump of the hanged process
state?
Original comment by borislav...@gmail.com
on 7 Jul 2012 at 4:17
Next time I'll see it happen, I'll do a thread dump and send it to you!
Original comment by thomas.h...@gmail.com
on 9 Jul 2012 at 7:50
I have a similar problem: I instantiate HyperGraph using this code:
HyperGraph createHyperGraphDB(String dbPath) throws IOException {
HyperGraph graphDb = new HyperGraph(dbPath);
registerShutdownHook(graphDb);
return graphDb;
}
private static void registerShutdownHook(final HyperGraph graphDb) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
graphDb.close();
}
});
}
The application then deadlocks on shutdown:
Name: Thread-4
State: BLOCKED on java.lang.Class@44f44758 owned by: Thread-2
Total blocked: 2 Total waited: 1
Stack trace:
org.hypergraphdb.HGEnvironment.getMemoryWarningSystem(HGEnvironment.java:68)
org.hypergraphdb.cache.MRUCache.close(MRUCache.java:446)
org.hypergraphdb.cache.WeakRefAtomCache.close(WeakRefAtomCache.java:395)
org.hypergraphdb.HyperGraph.close(HyperGraph.java:412)
- locked java.lang.Object@7261502c
info.gehrels.diplomarbeit.hypergraphdb.HyperGraphDBHelper$1.run(HyperGraphDBHelp
er.java:19)
Name: Thread-2
State: BLOCKED on java.lang.Object@7261502c owned by: Thread-4
Total blocked: 1 Total waited: 0
Stack trace:
org.hypergraphdb.HyperGraph.close(HyperGraph.java:407)
org.hypergraphdb.HGEnvironment.closeAll(HGEnvironment.java:233)
- locked java.lang.Class@44f44758
org.hypergraphdb.HGEnvironment$OnShutdown.run(HGEnvironment.java:264)
java.lang.Thread.run(Thread.java:722)
Original comment by google-a...@gehrels.info
on 11 Dec 2012 at 4:57
There's some deadlock going, so I'd need a full thread dump (all threads), at
least once, but preferably a couple spaced within some time intervals.
In any case, the issue seems two happen when there are multiple concurrent
calls to HyperGraph.close. Please note that you don't need to create shutdown
hook to close the graph as this is already done in the HGEnvironment. Perhaps
that's what's causing the conflict. Does it happen consistently for you or is
it intermittent?
Original comment by borislav...@gmail.com
on 12 Dec 2012 at 4:08
2012-12-12 14:18:10
Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.1-b03 mixed mode):
"RMI TCP Connection(5)-10.100.239.157" daemon prio=6 tid=0x000000000e2e1800
nid=0x10ac in Object.wait() [0x0000000010e0d000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000da726470> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer)
at com.sun.jmx.remote.internal.ArrayNotificationBuffer.fetchNotifications(ArrayNotificationBuffer.java:435)
- locked <0x00000000da726470> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer)
at com.sun.jmx.remote.internal.ArrayNotificationBuffer$ShareBuffer.fetchNotifications(ArrayNotificationBuffer.java:227)
at com.sun.jmx.remote.internal.ServerNotifForwarder.fetchNotifs(ServerNotifForwarder.java:274)
at javax.management.remote.rmi.RMIConnectionImpl$2.run(RMIConnectionImpl.java:1253)
at javax.management.remote.rmi.RMIConnectionImpl$2.run(RMIConnectionImpl.java:1251)
at javax.management.remote.rmi.RMIConnectionImpl.fetchNotifications(RMIConnectionImpl.java:1257)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
"RMI TCP Connection(idle)" daemon prio=6 tid=0x000000000e2e1000 nid=0x13fc
waiting on condition [0x0000000010c7e000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d9c481f8> (a java.util.concurrent.SynchronousQueue$TransferStack)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
"RMI TCP Connection(idle)" daemon prio=6 tid=0x000000000deeb800 nid=0xcf0
waiting on condition [0x000000001072e000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d9c481f8> (a java.util.concurrent.SynchronousQueue$TransferStack)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
"JMX server connection timeout 27" daemon prio=6 tid=0x000000000deeb000
nid=0xf34 in Object.wait() [0x00000000100af000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000da6689f0> (a [I)
at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168)
- locked <0x00000000da6689f0> (a [I)
at java.lang.Thread.run(Thread.java:722)
"RMI Scheduler(0)" daemon prio=6 tid=0x000000000deea000 nid=0x954 waiting on
condition [0x00000000108ff000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d9c5f738> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
"RMI TCP Accept-0" daemon prio=6 tid=0x000000000dee8800 nid=0x80 runnable
[0x000000000fe6e000]
java.lang.Thread.State: RUNNABLE
at java.net.DualStackPlainSocketImpl.accept0(Native Method)
at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:121)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:183)
- locked <0x00000000d9c63868> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:522)
at java.net.ServerSocket.accept(ServerSocket.java:490)
at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:359)
at java.lang.Thread.run(Thread.java:722)
"Thread-2" prio=6 tid=0x000000000dee7800 nid=0x6dc waiting for monitor entry
[0x00000000103bf000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.hypergraphdb.HyperGraph.close(HyperGraph.java:407)
- waiting to lock <0x00000000841d7d88> (a java.lang.Object)
at org.hypergraphdb.HGEnvironment.closeAll(HGEnvironment.java:233)
- locked <0x00000000841d2748> (a java.lang.Class for org.hypergraphdb.HGEnvironment)
at org.hypergraphdb.HGEnvironment$OnShutdown.run(HGEnvironment.java:264)
at java.lang.Thread.run(Thread.java:722)
"Thread-4" prio=6 tid=0x000000000dee7000 nid=0xfb4 waiting for monitor entry
[0x000000001020f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.hypergraphdb.HGEnvironment.getMemoryWarningSystem(HGEnvironment.java:68)
- waiting to lock <0x00000000841d2748> (a java.lang.Class for org.hypergraphdb.HGEnvironment)
at org.hypergraphdb.cache.MRUCache.close(MRUCache.java:446)
at org.hypergraphdb.cache.WeakRefAtomCache.close(WeakRefAtomCache.java:395)
at org.hypergraphdb.HyperGraph.close(HyperGraph.java:412)
- locked <0x00000000841d7d88> (a java.lang.Object)
at info.gehrels.diplomarbeit.hypergraphdb.HyperGraphDBHelper$1.run(HyperGraphDBHelper.java:24)
"DestroyJavaVM" prio=6 tid=0x000000000dee6000 nid=0x968 in Object.wait()
[0x000000000223e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000083f7f240> (a info.gehrels.diplomarbeit.hypergraphdb.HyperGraphDBHelper$1)
at java.lang.Thread.join(Thread.java:1258)
- locked <0x0000000083f7f240> (a info.gehrels.diplomarbeit.hypergraphdb.HyperGraphDBHelper$1)
at java.lang.Thread.join(Thread.java:1332)
at java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks.java:106)
at java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.java:46)
at java.lang.Shutdown.runHooks(Shutdown.java:123)
at java.lang.Shutdown.sequence(Shutdown.java:167)
at java.lang.Shutdown.shutdown(Shutdown.java:234)
- locked <0x0000000083f7f388> (a java.lang.Class for java.lang.Shutdown)
"HyperGraph Cache Maintenance" daemon prio=8 tid=0x000000000dee4800 nid=0x214
in Object.wait() [0x000000000ff7f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000840962b0> (a java.util.LinkedList)
at org.hypergraphdb.util.ActionQueueThread.run(ActionQueueThread.java:126)
- locked <0x00000000840962b0> (a java.util.LinkedList)
"HGCHECKPOINT" daemon prio=6 tid=0x000000000d38d000 nid=0x1700 waiting on
condition [0x000000000f37f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.hypergraphdb.storage.bje.BJEStorageImplementation$CheckPointThread.run(BJEStorageImplementation.java:609)
"Checkpointer" daemon prio=6 tid=0x000000000d38c800 nid=0xb6c in Object.wait()
[0x000000000fc6f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000084cb1940> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:174)
- locked <0x0000000084cb1940> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"Cleaner-5" daemon prio=6 tid=0x000000000daf3800 nid=0x900 in Object.wait()
[0x000000000fa2f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000084cc4fa8> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:174)
- locked <0x0000000084cc4fa8> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"Cleaner-4" daemon prio=6 tid=0x000000000daf3000 nid=0x998 in Object.wait()
[0x000000000f91e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000084cc5180> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:174)
- locked <0x0000000084cc5180> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"Cleaner-3" daemon prio=6 tid=0x000000000de81800 nid=0x984 in Object.wait()
[0x000000000f76f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000084cc5358> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:174)
- locked <0x0000000084cc5358> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"Cleaner-2" daemon prio=6 tid=0x000000000de81000 nid=0x1380 in Object.wait()
[0x000000000f5ae000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000084cc5530> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:174)
- locked <0x0000000084cc5530> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"Cleaner-1" daemon prio=6 tid=0x000000000dbcf800 nid=0x14e0 in Object.wait()
[0x000000000f4af000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x0000000084cc5708> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:174)
- locked <0x0000000084cc5708> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"INCompressor" daemon prio=6 tid=0x000000000dbce800 nid=0xb50 in Object.wait()
[0x000000000f23f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x000000008402fe98> (a java.lang.Object)
at com.sleepycat.je.utilint.DaemonThread.run(DaemonThread.java:176)
- locked <0x000000008402fe98> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:722)
"Monitor Ctrl-Break" daemon prio=6 tid=0x000000000d0b2800 nid=0x12f0 runnable
[0x000000000d52e000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
- locked <0x00000000de29aef0> (a java.io.InputStreamReader)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
- locked <0x00000000de29aef0> (a java.io.InputStreamReader)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:85)
at java.lang.Thread.run(Thread.java:722)
"Service Thread" daemon prio=6 tid=0x000000000b486000 nid=0x1618 runnable
[0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=10 tid=0x000000000b482000 nid=0x1730 waiting
on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=10 tid=0x000000000b479000 nid=0x1480 waiting
on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Attach Listener" daemon prio=10 tid=0x000000000b478000 nid=0x4dc runnable
[0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x000000000b471000 nid=0xdb0 waiting on
condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=0x0000000001ec8000 nid=0x1568 in Object.wait()
[0x000000000c69f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000849a1040> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
- locked <0x00000000849a1040> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)
"Reference Handler" daemon prio=10 tid=0x0000000001ec1800 nid=0xd70 in
Object.wait() [0x000000000c30f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000849a0b28> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x00000000849a0b28> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x000000000b3f2800 nid=0x78 runnable
"GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000001e16000 nid=0x1324
runnable
"GC task thread#1 (ParallelGC)" prio=6 tid=0x0000000001e18000 nid=0xf28
runnable
"GC task thread#2 (ParallelGC)" prio=6 tid=0x0000000001e19800 nid=0xcdc
runnable
"GC task thread#3 (ParallelGC)" prio=6 tid=0x0000000001e1b000 nid=0x8ac
runnable
"VM Periodic Task Thread" prio=10 tid=0x000000000b4a0800 nid=0x1420 waiting on
condition
JNI global references: 185
Found one Java-level deadlock:
=============================
"Thread-2":
waiting to lock monitor 0x000000000d362410 (object 0x00000000841d7d88, a java.lang.Object),
which is held by "Thread-4"
"Thread-4":
waiting to lock monitor 0x000000000d3626b0 (object 0x00000000841d2748, a java.lang.Class),
which is held by "Thread-2"
Java stack information for the threads listed above:
===================================================
"Thread-2":
at org.hypergraphdb.HyperGraph.close(HyperGraph.java:407)
- waiting to lock <0x00000000841d7d88> (a java.lang.Object)
at org.hypergraphdb.HGEnvironment.closeAll(HGEnvironment.java:233)
- locked <0x00000000841d2748> (a java.lang.Class for org.hypergraphdb.HGEnvironment)
at org.hypergraphdb.HGEnvironment$OnShutdown.run(HGEnvironment.java:264)
at java.lang.Thread.run(Thread.java:722)
"Thread-4":
at org.hypergraphdb.HGEnvironment.getMemoryWarningSystem(HGEnvironment.java:68)
- waiting to lock <0x00000000841d2748> (a java.lang.Class for org.hypergraphdb.HGEnvironment)
at org.hypergraphdb.cache.MRUCache.close(MRUCache.java:446)
at org.hypergraphdb.cache.WeakRefAtomCache.close(WeakRefAtomCache.java:395)
at org.hypergraphdb.HyperGraph.close(HyperGraph.java:412)
- locked <0x00000000841d7d88> (a java.lang.Object)
at info.gehrels.diplomarbeit.hypergraphdb.HyperGraphDBHelper$1.run(HyperGraphDBHelper.java:24)
Found 1 deadlock.
Heap
PSYoungGen total 343168K, used 177902K [0x00000000d66b0000, 0x00000000f48c0000, 0x0000000000000000)
eden space 295104K, 44% used [0x00000000d66b0000,0x00000000de58b500,0x00000000e86e0000)
from space 48064K, 99% used [0x00000000f19d0000,0x00000000f48b03a8,0x00000000f48c0000)
to space 60160K, 0% used [0x00000000ed340000,0x00000000ed340000,0x00000000f0e00000)
ParOldGen total 162624K, used 95454K [0x0000000083400000, 0x000000008d2d0000, 0x00000000d66b0000)
object space 162624K, 58% used [0x0000000083400000,0x0000000089137a78,0x000000008d2d0000)
PSPermGen total 21248K, used 13565K [0x000000007e200000, 0x000000007f6c0000, 0x0000000083400000)
object space 21248K, 63% used [0x000000007e200000,0x000000007ef3f5c8,0x000000007f6c0000)
Original comment by google-a...@gehrels.info
on 12 Dec 2012 at 1:18
This happens ~80% of the time i run the code. Since the docs say (somewhere),
that it is very important to ensure, that the database gets properly closed, it
would maybe be a good idea to clarify this in the docs.
Original comment by google-a...@gehrels.info
on 12 Dec 2012 at 1:24
Thanks, will take a look and try to fix :)
Original comment by borislav...@gmail.com
on 13 Dec 2012 at 7:30
Original issue reported on code.google.com by
thomas.h...@gmail.com
on 14 Feb 2012 at 11:31