From 6dfa30e938babc2cac59f2d5eac1f4d46a361b93 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Sun, 4 Sep 2011 23:48:17 +0500 Subject: bug 839341 100% CPU usage with ST_UNION in maria-5.3-gis. Line loops weren't recognized when collect results. Fixed by checking if we got the same beginning point of the line. per-file comments: mysql-test/r/gis-precise.result bug 839341 100% CPU usage with ST_UNION in maria-5.3-gis. test result updated. mysql-test/t/gis-precise.test bug 839341 100% CPU usage with ST_UNION in maria-5.3-gis. test case added. sql/gcalc_tools.cc bug 839341 100% CPU usage with ST_UNION in maria-5.3-gis. check if we get the beginning node of the linestring, then cut the loop. --- sql/gcalc_tools.cc | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'sql') diff --git a/sql/gcalc_tools.cc b/sql/gcalc_tools.cc index 0d5c1c52d61..e502d54a160 100644 --- a/sql/gcalc_tools.cc +++ b/sql/gcalc_tools.cc @@ -1158,6 +1158,7 @@ int Gcalc_operation_reducer::get_line_result(res_point *cur, Gcalc_result_receiver *storage) { res_point *next; + res_point *cur_orig= cur; int move_upward= 1; if (cur->glue) { @@ -1171,6 +1172,14 @@ int Gcalc_operation_reducer::get_line_result(res_point *cur, if (!next) { next= cur->glue; + if (next == cur_orig) + { + /* It's the line loop */ + cur= cur_orig; + cur->glue->glue= NULL; + move_upward= 1; + break; + } move_upward^= 1; } } -- cgit v1.2.1