diff options
-rw-r--r-- | mysql-test/r/gis-precise.result | 4 | ||||
-rw-r--r-- | mysql-test/t/gis-precise.test | 6 | ||||
-rw-r--r-- | sql/gcalc_slicescan.cc | 2 |
3 files changed, 12 insertions, 0 deletions
diff --git a/mysql-test/r/gis-precise.result b/mysql-test/r/gis-precise.result index 89e5c237413..76f72bb8102 100644 --- a/mysql-test/r/gis-precise.result +++ b/mysql-test/r/gis-precise.result @@ -505,6 +505,10 @@ GEOMETRYFROMTEXT('POINT(4599 60359)'), ) as relate_res; relate_res 0 +prepare s from 'do st_convexhull(st_aswkb(multipoint(point(-11702,15179),point(-5031,27960),point(-30557,11158),point(-27804,30314))))'; +execute s; +execute s; +deallocate prepare s; DROP TABLE IF EXISTS p1; CREATE PROCEDURE p1(dist DOUBLE, geom TEXT) BEGIN diff --git a/mysql-test/t/gis-precise.test b/mysql-test/t/gis-precise.test index 7391b2114f3..7626da650b4 100644 --- a/mysql-test/t/gis-precise.test +++ b/mysql-test/t/gis-precise.test @@ -381,5 +381,11 @@ SELECT ST_RELATE( 'F*FFFF**F' ) as relate_res; +# MDEV-18920 Prepared statements with st_convexhull hang and eat 100% cpu. +prepare s from 'do st_convexhull(st_aswkb(multipoint(point(-11702,15179),point(-5031,27960),point(-30557,11158),point(-27804,30314))))'; +execute s; +execute s; +deallocate prepare s; + --source include/gis_debug.inc diff --git a/sql/gcalc_slicescan.cc b/sql/gcalc_slicescan.cc index ab48542add6..644ab4b8710 100644 --- a/sql/gcalc_slicescan.cc +++ b/sql/gcalc_slicescan.cc @@ -982,6 +982,8 @@ void Gcalc_heap::reset() { if (m_n_points) { + if (m_hook) + *m_hook= NULL; free_list(m_first); m_n_points= 0; } |