summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicențiu Ciorbaru <vicentiu@mariadb.org>2016-09-12 18:50:47 +0200
committerVicențiu Ciorbaru <vicentiu@mariadb.org>2016-09-12 18:50:47 +0200
commit54b81ac57f89cf38f7166c0691eb78a093d94824 (patch)
treec23c8031eedce86c172e1b19ad382d5064c417e3
parentec59220f2c83945026e829b353e3bda84ad41a7a (diff)
downloadmariadb-git-54b81ac57f89cf38f7166c0691eb78a093d94824.tar.gz
Window functions fail with --ps-protocol
When running with --ps protocol, window functions cleanup method may be called twice. Enforce proper cleanup by setting pointers to NULL after deletion. This prevents double deletion on second cleanup.
-rw-r--r--sql/item_windowfunc.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/sql/item_windowfunc.h b/sql/item_windowfunc.h
index bb2256207ec..433b3f6c4fd 100644
--- a/sql/item_windowfunc.h
+++ b/sql/item_windowfunc.h
@@ -198,8 +198,11 @@ public:
void cleanup()
{
if (peer_tracker)
+ {
peer_tracker->cleanup();
- delete peer_tracker;
+ delete peer_tracker;
+ peer_tracker= NULL;
+ }
Item_sum_int::cleanup();
}
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@@ -268,6 +271,7 @@ class Item_sum_dense_rank: public Item_sum_int
{
peer_tracker->cleanup();
delete peer_tracker;
+ peer_tracker= NULL;
}
Item_sum_int::cleanup();
}
@@ -379,6 +383,7 @@ class Item_sum_percent_rank: public Item_sum_window_with_row_count
{
peer_tracker->cleanup();
delete peer_tracker;
+ peer_tracker= NULL;
}
Item_sum_num::cleanup();
}