Add missing CHECK_FOR_INTERRUPTS in lseg_inside_poly
authorAlvaro Herrera <[email protected]>
Mon, 14 Dec 2015 19:44:40 +0000 (16:44 -0300)
committerAlvaro Herrera <[email protected]>
Mon, 14 Dec 2015 19:44:40 +0000 (16:44 -0300)
Apparently, there are bugs in this code that cause it to loop endlessly.
That bug still needs more research, but in the meantime it's clear that
the loop is missing a check for interrupts so that it can be cancelled
timely.

Backpatch to 9.1 -- this has been missing since 49475aab8d0d.

src/backend/utils/adt/geo_ops.c

index 7ebcaaa074218153fa0945c5175b1bea964fefea..9bf11cbbcf038ac7f0d4f79bc34fa0ae698a47f5 100644 (file)
@@ -20,6 +20,7 @@
 #include <ctype.h>
 
 #include "libpq/pqformat.h"
+#include "miscadmin.h"
 #include "utils/builtins.h"
 #include "utils/geo_decls.h"
 
@@ -3927,6 +3928,8 @@ lseg_inside_poly(Point *a, Point *b, POLYGON *poly, int start)
    {
        Point      *interpt;
 
+       CHECK_FOR_INTERRUPTS();
+
        s.p[1] = poly->p[i];
 
        if (on_ps_internal(t.p, &s))