[osmosis-dev] calling DataPostbox.release() multiple times
Richard Hansen
rhansen at bbn.com
Sun Jan 15 03:09:54 GMT 2012
Hi all,
I believe I have found a bug in DataPostbox.release(). (I'm using git
master, currently 43089ed.)
According to the javadoc comments, Releaseable.release() can be called
multiple times. However, DataPostbox.release() can only be called once.
If it is called a second time, it blocks forever waiting for the
output thread (which no longer exists) to release.
I noticed this because the pbf reader can call release() twice,
triggering the lockup. To recreate, you can run the following:
osmosis --read-pbf /dev/null --buffer --write-null
The two calls to DataPostbox.release() have the following stack traces:
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1266)
at
org.openstreetmap.osmosis.core.store.DataPostbox.release(DataPostbox.java:335)
at
org.openstreetmap.osmosis.core.buffer.v0_6.EntityBuffer.release(EntityBuffer.java:64)
at
crosby.binary.osmosis.OsmosisBinaryParser.complete(OsmosisBinaryParser.java:36)
at
crosby.binary.file.BlockInputStream.process(BlockInputStream.java:37)
at crosby.binary.osmosis.OsmosisReader.run(OsmosisReader.java:45)
at java.lang.Thread.run(Thread.java:679)
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Thread.java:1266)
at
org.openstreetmap.osmosis.core.store.DataPostbox.release(DataPostbox.java:335)
at
org.openstreetmap.osmosis.core.buffer.v0_6.EntityBuffer.release(EntityBuffer.java:64)
at crosby.binary.osmosis.OsmosisReader.run(OsmosisReader.java:50)
at java.lang.Thread.run(Thread.java:679)
Deleting line 36 of
pbf/src/main/java/crosby/binary/osmosis/OsmosisBinaryParser.java will
cause DataPostbox.release() to be called only once, but that just avoids
the bug.
I believe a proper fix to DataPostbox.release() will require a minor
redesign of the DataPostbox lifetime management code. I'm not familiar
enough with the code to feel comfortable making such a change. I can
take a crack at it, but I'm hoping an expert has the time to take a look.
Thanks,
Richard
More information about the osmosis-dev
mailing list