[tarantool-patches] [PATCH v2 4/9] box: fix on_replace_trigger_rollback routine
Kirill Shcherbatov
kshcherbatov at tarantool.org
Wed Jan 30 11:59:11 MSK 2019
The function on_replace_trigger_rollback in the case of a replace
operation rollback was called with an incorrect argument, as a
result of which the used memory was freed.
---
src/box/alter.cc | 3 ++-
test/sql/errinj.result | 24 ++++++++++++++++++++++++
test/sql/errinj.test.lua | 7 +++++++
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/src/box/alter.cc b/src/box/alter.cc
index ab3dd2e22..eff3524cf 100644
--- a/src/box/alter.cc
+++ b/src/box/alter.cc
@@ -3591,7 +3591,8 @@ on_replace_dd_trigger(struct trigger * /* trigger */, void *event)
diag_raise();
on_commit->data = old_trigger;
- on_rollback->data = new_trigger;
+ on_rollback->data =
+ old_tuple == NULL ? new_trigger : old_trigger;
new_trigger_guard.is_active = false;
}
diff --git a/test/sql/errinj.result b/test/sql/errinj.result
index c423c8bc6..acce52e8a 100644
--- a/test/sql/errinj.result
+++ b/test/sql/errinj.result
@@ -205,6 +205,30 @@ box.error.injection.set("ERRINJ_WAL_IO", true)
---
- ok
...
+t = box.space._trigger:get('T1T')
+---
+...
+t_new = t:totable()
+---
+...
+t_new[3]['sql'] = 'CREATE TRIGGER t1t INSERT ON t1 BEGIN INSERT INTO t2 VALUES (2, 2); END;'
+---
+...
+_ = box.space._trigger:replace(t, t_new)
+---
+- error: Failed to write to disk
+...
+box.error.injection.set("ERRINJ_WAL_IO", false)
+---
+- ok
+...
+_ = box.space._trigger:replace(t, t_new)
+---
+...
+box.error.injection.set("ERRINJ_WAL_IO", true)
+---
+- ok
+...
box.sql.execute("DROP TRIGGER t1t;")
---
- error: Failed to write to disk
diff --git a/test/sql/errinj.test.lua b/test/sql/errinj.test.lua
index 8378c255c..fc19c859b 100644
--- a/test/sql/errinj.test.lua
+++ b/test/sql/errinj.test.lua
@@ -75,6 +75,13 @@ box.sql.execute("INSERT INTO t1 VALUES (3, 3);")
box.sql.execute("SELECT * from t1");
box.sql.execute("SELECT * from t2");
box.error.injection.set("ERRINJ_WAL_IO", true)
+t = box.space._trigger:get('T1T')
+t_new = t:totable()
+t_new[3]['sql'] = 'CREATE TRIGGER t1t INSERT ON t1 BEGIN INSERT INTO t2 VALUES (2, 2); END;'
+_ = box.space._trigger:replace(t, t_new)
+box.error.injection.set("ERRINJ_WAL_IO", false)
+_ = box.space._trigger:replace(t, t_new)
+box.error.injection.set("ERRINJ_WAL_IO", true)
box.sql.execute("DROP TRIGGER t1t;")
box.error.injection.set("ERRINJ_WAL_IO", false)
box.sql.execute("DELETE FROM t1;")
--
2.19.2
More information about the Tarantool-patches
mailing list