[postgis-tickets] [PostGIS] #3579: Backend crash with mixed collections
PostGIS
trac at osgeo.org
Thu Jun 16 05:32:26 PDT 2016
#3579: Backend crash with mixed collections
----------------------+---------------------------
Reporter: pramsey | Owner: pramsey
Type: defect | Status: closed
Priority: blocker | Milestone: PostGIS 2.2.3
Component: postgis | Version: 2.2.x
Resolution: fixed | Keywords:
----------------------+---------------------------
Comment (by pramsey):
Here's a stack-trace. Seems like a pretty common code path
(geometry.intersects()). Is it possible we never exercised GEOS w/
collections containing a mixture of full/empty geometry before?
{{{
* thread #1: tid = 0x1a7a62, 0x000000010be7a09b
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(geos::geom::Coordinate
const&, geos::geom::LineString const*) [inlined]
geos::geom::Coordinate::equals2D(this=<unavailable>,
other=0x0000000000000000) const + 5 at Coordinate.inl:52, queue =
'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1,
address=0x0)
frame #0: 0x000000010be7a09b
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(geos::geom::Coordinate
const&, geos::geom::LineString const*) [inlined]
geos::geom::Coordinate::equals2D(this=<unavailable>,
other=0x0000000000000000) const + 5 at Coordinate.inl:52
49 INLINE bool
50 Coordinate::equals2D(const Coordinate& other) const
51 {
-> 52 if (x != other.x) return false;
53 if (y != other.y) return false;
54 return true;
55 }
(lldb) bt
* thread #1: tid = 0x1a7a62, 0x000000010be7a09b
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(geos::geom::Coordinate
const&, geos::geom::LineString const*) [inlined]
geos::geom::Coordinate::equals2D(this=<unavailable>,
other=0x0000000000000000) const + 5 at Coordinate.inl:52, queue =
'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1,
address=0x0)
* frame #0: 0x000000010be7a09b
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(geos::geom::Coordinate
const&, geos::geom::LineString const*) [inlined]
geos::geom::Coordinate::equals2D(this=<unavailable>,
other=0x0000000000000000) const + 5 at Coordinate.inl:52
frame #1: 0x000000010be7a096
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(geos::geom::Coordinate
const&, geos::geom::LineString const*) [inlined]
geos::geom::operator==(b=0x0000000000000000) at Coordinate.inl:123
frame #2: 0x000000010be7a096
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(this=<unavailable>,
p=0x00007f9881e022e0, l=<unavailable>) + 54 at PointLocator.cpp:133
frame #3: 0x000000010be7a412
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::computeLocation(this=0x00007fff5dba46f0,
p=0x00007f9881e022e0, geom=<unavailable>) + 418 at PointLocator.cpp:82
frame #4: 0x000000010be7a026
libgeos-3.6.0dev.dylib`geos::algorithm::PointLocator::locate(this=0x00007fff5dba46f0,
p=0x00007f9881e022e0, geom=0x00007f9881e01520) + 182 at
PointLocator.cpp:55
frame #5: 0x000000010bef71f4
libgeos-3.6.0dev.dylib`geos::operation::relate::RelateComputer::labelIsolatedNodes()
[inlined]
geos::operation::relate::RelateComputer::labelIsolatedNode(targetIndex=1)
+ 31 at RelateComputer.cpp:508
frame #6: 0x000000010bef71d5
libgeos-3.6.0dev.dylib`geos::operation::relate::RelateComputer::labelIsolatedNodes(this=0x00007fff5dba4678)
+ 165 at RelateComputer.cpp:499
frame #7: 0x000000010bef69c6
libgeos-3.6.0dev.dylib`geos::operation::relate::RelateComputer::computeIM(this=0x00007fff5dba4678)
+ 374 at RelateComputer.cpp:162
frame #8: 0x000000010bef8276
libgeos-3.6.0dev.dylib`geos::operation::relate::RelateOp::relate(geos::geom::Geometry
const*, geos::geom::Geometry const*) [inlined]
geos::operation::relate::RelateOp::getIntersectionMatrix() + 8 at
RelateOp.cpp:74
frame #9: 0x000000010bef826e
libgeos-3.6.0dev.dylib`geos::operation::relate::RelateOp::relate(a=<unavailable>,
b=<unavailable>) + 78 at RelateOp.cpp:42
frame #10: 0x000000010be83b0d
libgeos-3.6.0dev.dylib`geos::geom::Geometry::intersects(this=0x00007f9881e017f0,
g=0x00007f9881e01520) const + 333 at Geometry.cpp:344
frame #11: 0x000000010306d0b5
libgeos_c.1.dylib`::GEOSIntersects_r(extHandle=<unavailable>,
g1=<unavailable>, g2=<unavailable>) + 53 at geos_ts_c.cpp:500
frame #12: 0x0000000102f6682c
postgis-2.3.so`geos_intersects(fcinfo=0x00007f98830648a8) + 1628 at
lwgeom_geos.c:2418
frame #13: 0x0000000102f69738
postgis-2.3.so`intersects(fcinfo=0x00007f98830648a8) + 40 at
lwgeom_backend_api.c:173
frame #14: 0x00000001022bb29a
postgres`ExecMakeFunctionResultNoSets(fcache=0x00007f9883064838,
econtext=0x00007f988305b580, isNull="", isDone=0x0000000000000000) + 346
at execQual.c:2026
frame #15: 0x00000001022b4d47
postgres`ExecEvalFunc(fcache=0x00007f9883064838,
econtext=0x00007f988305b580, isNull="", isDone=0x0000000000000000) + 199
at execQual.c:2417
frame #16: 0x00000001022b5d16
postgres`ExecEvalAnd(andExpr=0x00007f988305b678,
econtext=0x00007f988305b580, isNull="", isDone=0x00007f98830689c0) + 134
at execQual.c:2831
frame #17: 0x00000001022ba0ef
postgres`ExecTargetList(targetlist=0x00007f9883068960,
econtext=0x00007f988305b580, values=0x00007f9883068820, isnull="",
itemIsDone=0x00007f98830689c0, isDone=0x00007fff5dba4c84) + 175 at
execQual.c:5307
frame #18: 0x00000001022ba005
postgres`ExecProject(projInfo=0x00007f9883068868,
isDone=0x00007fff5dba4c84) + 741 at execQual.c:5522
frame #19: 0x00000001022d8084
postgres`ExecNestLoop(node=0x00007f988305b468) + 1140 at
nodeNestloop.c:267
frame #20: 0x00000001022adeaa
postgres`ExecProcNode(node=0x00007f988305b468) + 490 at execProcnode.c:449
frame #21: 0x00000001022a98d3
postgres`ExecutePlan(estate=0x00007f9883056438,
planstate=0x00007f988305b468, operation=CMD_SELECT, sendTuples='\x01',
numberTuples=0, direction=ForwardScanDirection, dest=0x00007f988304ac40) +
115 at execMain.c:1490
frame #22: 0x00000001022a97fa
postgres`standard_ExecutorRun(queryDesc=0x00007f988302aa38,
direction=ForwardScanDirection, count=0) + 490 at execMain.c:319
frame #23: 0x00000001022a960a
postgres`ExecutorRun(queryDesc=0x00007f988302aa38,
direction=ForwardScanDirection, count=0) + 74 at execMain.c:267
frame #24: 0x00000001024676a4
postgres`PortalRunSelect(portal=0x00007f9883044438, forward='\x01',
count=0, dest=0x00007f988304ac40) + 308 at pquery.c:942
frame #25: 0x0000000102467087
postgres`PortalRun(portal=0x00007f9883044438, count=9223372036854775807,
isTopLevel='\x01', dest=0x00007f988304ac40, altdest=0x00007f988304ac40,
completionTag="") + 679 at pquery.c:786
frame #26: 0x0000000102462947
postgres`exec_simple_query(query_string="with\n params as (\n
select\n 11 :: float as sidewalk_offset,\n 1 ::
float as epsilon\n ),\n road as (\n\n select
'SRID=3857;LINESTRING(10 0, 0 0, 0 10)' :: geometry as geom\n ),\n
sidewalks as (\n select ST_Collect(\n
ST_OffsetCurve(geom, sidewalk_offset),\n
ST_OffsetCurve(geom, -sidewalk_offset)\n ) geom\n
from road, params\n )\nselect\n ST_Intersects(road.geom,
sidewalks.geom),\n\n ST_Intersects(ST_Buffer(road.geom, sidewalk_offset
+ epsilon), sidewalks.geom) \nfrom road, sidewalks, params;") + 1239 at
postgres.c:1072
frame #27: 0x0000000102461cb8 postgres`PostgresMain(argc=1,
argv=0x00007f98820060d8, dbname="postgis23", username="pramsey") + 2856 at
postgres.c:4079
frame #28: 0x00000001023ca585
postgres`BackendRun(port=0x00007f9881f00c80) + 693 at postmaster.c:4285
frame #29: 0x00000001023c97c8
postgres`BackendStartup(port=0x00007f9881f00c80) + 408 at
postmaster.c:3948
frame #30: 0x00000001023c8985 postgres`ServerLoop + 597 at
postmaster.c:1679
frame #31: 0x00000001023c6271 postgres`PostmasterMain(argc=3,
argv=0x00007f9881c07220) + 5409 at postmaster.c:1287
frame #32: 0x0000000102305daa postgres`main(argc=3,
argv=0x00007f9881c07220) + 746 at main.c:233
frame #33: 0x00007fff8454b5ad libdyld.dylib`start + 1
}}}
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/3579#comment:8>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-tickets
mailing list