[postgis-devel] [PostGIS] #627: PostGIS/PostgreSQL process terminates on invalid geometry

Peter Hopfgartner peter.hopfgartner at r3-gis.com
Tue Nov 23 03:03:40 PST 2010


In the end, it seems that all comes down to an assert, see geos-3.2.2/source/geomgraph/Node.cpp:140
I'm wondering, if there is a better way to handle asserts.
>From a user POV, I simply have a PostgreSQL process which gets terminated and I'm not in the position to provide useful feedback to the developers or do whatever else might be reasonable. Even in a long conversation with Tom Lane I was not able to get at the source of those server processes terminating in a rather ugly way.
The impression that could result, would be that of PostgreSQL+PostGIS to break from time to time.
Asserts might fail in various situations, especially when invalid geometries are involved. If some useful information would be provided and a less traumatic way to handle the error could found, then a positive feedback could be provided by the users.

Regards,

Peter Hopfgartner
 
R3 GIS Srl - GmbH
http://www.r3-gis.com


--------PostGIS <trac at osgeo.org> wrote--------
Subject: Re: [PostGIS] #627: PostGIS/PostgreSQL process terminates on invalid geometry
Date: 23.11.2010 11:02

>#627: PostGIS/PostgreSQL process terminates on invalid geometry
>-------------------------+--------------------------------------------------
> Reporter:  hopfgartner  |       Owner:  pramsey      
>     Type:  defect       |      Status:  new          
> Priority:  medium       |   Milestone:  PostGIS 1.5.3
>Component:  postgis      |     Version:  1.5.X        
> Keywords:               |  
>-------------------------+--------------------------------------------------
>
>Comment(by hopfgartner):
>
> The backtrace looks like:
>
> Program received signal SIGABRT, Aborted.
> 0x00000032ba230265 in raise () from /lib64/libc.so.6
> (gdb) bt
> #0  0x00000032ba230265 in raise () from /lib64/libc.so.6
> #1  0x00000032ba231d10 in abort () from /lib64/libc.so.6
> #2  0x00000032ba2296e6 in __assert_fail () from /lib64/libc.so.6
> #3  0x00000032c56c8dde in geos::geomgraph::Node::add (this=<value
> optimized out>, e=<value optimized out>) at Node.cpp:140
> #4  0x00000032c56cb6d0 in geos::geomgraph::PlanarGraph::add (this=<value
> optimized out>, e=<value optimized out>)
>     at PlanarGraph.cpp:158
> #5  0x00000032c56cb7f4 in geos::geomgraph::PlanarGraph::addEdges
> (this=<value optimized out>, edgesToAdd=<value optimized out>)
>     at PlanarGraph.cpp:238
> #6  0x00000032c57076c6 in geos::operation::buffer::BufferBuilder::buffer
> (this=<value optimized out>, g=<value optimized out>,
>     distance=<value optimized out>) at BufferBuilder.cpp:394
> #7  0x00000032c5709ffb in
> geos::operation::buffer::BufferOp::bufferOriginalPrecision (this=<value
> optimized out>)
>     at BufferOp.cpp:162
> #8  0x00000032c570a0b6 in
> geos::operation::buffer::BufferOp::computeGeometry (this=<value
>optimized
> out>) at BufferOp.cpp:111
> #9  0x00000032c570a16c in
> geos::operation::buffer::BufferOp::getResultGeometry (this=<value
> optimized out>,
>     nDistance=<value optimized out>) at BufferOp.cpp:98
> #10 0x00000032c62109e0 in GEOSBufferWithStyle_r (extHandle=<value
> optimized out>, g1=<value optimized out>,
>     width=<value optimized out>, quadsegs=<value optimized out>,
> endCapStyle=<value optimized out>,
>     joinStyle=<value optimized out>, mitreLimit=<value optimized out>)
>at
> geos_ts_c.cpp:1455
> #11 0x00002aac17099238 in buffer (fcinfo=0x7fffb7b9af50) at
> lwgeom_geos.c:989
> #12 0x000000000053b392 in ExecMakeFunctionResult (fcache=0x11a803a0,
> econtext=0x11a80c80, isNull=0x7fffb7b9b35f "", isDone=0x0)
>     at execQual.c:1789
> #13 0x000000000053d33a in ExecEvalExprSwitchContext (expression=0x5a51,
> econtext=0x5a51, isNull=0x6 <Address 0x6 out of bounds>,
>     isDone=0xffffffffffffffff) at execQual.c:4206
> #14 0x000000000059de74 in evaluate_expr (expr=<value optimized out>,
> result_type=16400, result_typmod=-1) at clauses.c:3856
> #15 0x000000000059f10e in evaluate_function (funcid=16868,
> result_type=16400, result_typmod=-1, args=0x7fffb7b9b780,
>     allow_inline=1 '\001', context=0x7fffb7b9b910) at clauses.c:3467
> #16 simplify_function (funcid=16868, result_type=16400,
>result_typmod=-1,
> args=0x7fffb7b9b780, allow_inline=1 '\001',
>     context=0x7fffb7b9b910) at clauses.c:3271
> #17 0x000000000059f9de in eval_const_expressions_mutator
>(node=0x11a78700,
> context=0x7fffb7b9b910) at clauses.c:2152
> #18 0x00000000005624b2 in expression_tree_mutator (node=0x11a78870,
> mutator=0x59f680 <eval_const_expressions_mutator>,
>     context=0x7fffb7b9b910) at nodeFuncs.c:2014
> #19 0x000000000059f7bd in eval_const_expressions_mutator
>(node=0x11a78750,
> context=0x7fffb7b9b910) at clauses.c:2969
> #20 0x0000000000562ce6 in expression_tree_mutator (node=0x0,
> mutator=0x59f680 <eval_const_expressions_mutator>,
>     context=0x7fffb7b9b910) at nodeFuncs.c:1944
> #21 0x000000000059f7bd in eval_const_expressions_mutator
>(node=0x11a78680,
> context=0x7fffb7b9b910) at clauses.c:2969
> #22 0x00000000005a07ff in eval_const_expressions (root=<value optimized
> out>, node=0xffffffffffffffff) at clauses.c:2045
> #23 0x0000000000592521 in preprocess_expression (root=0x11a3b938,
> expr=0x5a51, kind=1) at planner.c:541
> #24 0x0000000000594c54 in subquery_planner (glob=0x11a3a400,
> parse=0x11a3a9b0, parent_root=0x0, hasRecursion=0 '\000',
>     tuple_fraction=0, subroot=0x7fffb7b9bb08) at planner.c:376
> #25 0x00000000005951e3 in standard_planner (parse=0x11a3a9b0,
> cursorOptions=0, boundParams=0x0) at planner.c:190
> #26 0x00000000005d9f61 in pg_plan_query (querytree=0x11a3a9b0,
> cursorOptions=0, boundParams=0x0) at postgres.c:697
> #27 0x00000000005da01e in pg_plan_queries (querytrees=<value optimized
> out>, cursorOptions=0, boundParams=0x0) at postgres.c:756
> #28 0x00000000005da804 in exec_simple_query (
>     query_string=0x11a39be0 "SELECT buffer('0101000020E864", '0'
><repeats
> 16 times>, "F8FF", '0' <repeats 12 times>, "F8FF', 50.0);") at
> postgres.c:920
> #29 0x00000000005db55b in PostgresMain (argc=4, argv=<value optimized
> out>, username=0x1199bc00 "postgres") at postgres.c:3614
> #30 0x00000000005b1d8d in ServerLoop () at postmaster.c:3462
> #31 0x00000000005b2b3c in PostmasterMain (argc=5, argv=0x11997a50) at
> postmaster.c:1040
> #32 0x00000000005603be in main (argc=5, argv=<value optimized out>) at
> main.c:188
>
>-- 
>Ticket URL: <http://trac.osgeo.org/postgis/ticket/627#comment:2>
>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-devel mailing list