From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 557EB2E28B for ; Sun, 9 Jun 2019 16:44:51 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GJj3_HW91i4O for ; Sun, 9 Jun 2019 16:44:51 -0400 (EDT) Received: from smtp39.i.mail.ru (smtp39.i.mail.ru [94.100.177.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id C5E9C2E241 for ; Sun, 9 Jun 2019 16:44:50 -0400 (EDT) From: Georgy Kirichenko Subject: [tarantool-patches] [PATCH v3 04/14] ddl: place alter structures onto a txn memory region Date: Sun, 9 Jun 2019 23:44:33 +0300 Message-Id: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: tarantool-patches@freelists.org Cc: Georgy Kirichenko As alter schema triggers lifecycle is bound with a transaction so corresponding structures should be placed onto a txn memory region instead of a fiber gc space. Prerequisites: #1254 --- src/box/alter.cc | 8 ++++---- src/box/vinyl.c | 10 ++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/box/alter.cc b/src/box/alter.cc index c4a1c52a9..671209b51 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -668,7 +668,7 @@ public: void *operator new(size_t size) { - return region_aligned_calloc_xc(&fiber()->gc, size, + return region_aligned_calloc_xc(&in_txn()->region, size, alignof(uint64_t)); } void operator delete(void * /* ptr */) {} @@ -682,7 +682,7 @@ static struct trigger * txn_alter_trigger_new(trigger_f run, void *data) { struct trigger *trigger = (struct trigger *) - region_calloc_object_xc(&fiber()->gc, struct trigger); + txn_alloc(in_txn(), sizeof(struct trigger)); trigger->run = run; trigger->data = data; trigger->destroy = NULL; @@ -718,7 +718,7 @@ static struct alter_space * alter_space_new(struct space *old_space) { struct alter_space *alter = - region_calloc_object_xc(&fiber()->gc, struct alter_space); + region_calloc_object_xc(&in_txn()->region, struct alter_space); rlist_create(&alter->ops); alter->old_space = old_space; alter->space_def = space_def_dup_xc(alter->old_space->def); @@ -3246,7 +3246,7 @@ on_replace_dd_sequence(struct trigger * /* trigger */, void *event) struct tuple *new_tuple = stmt->new_tuple; struct alter_sequence *alter = - region_calloc_object_xc(&fiber()->gc, struct alter_sequence); + region_calloc_object_xc(&txn->region, struct alter_sequence); struct sequence_def *new_def = NULL; auto def_guard = make_scoped_guard([=] { free(new_def); }); diff --git a/src/box/vinyl.c b/src/box/vinyl.c index 8286fed7c..e37631064 100644 --- a/src/box/vinyl.c +++ b/src/box/vinyl.c @@ -4618,19 +4618,17 @@ vy_deferred_delete_on_replace(struct trigger *trigger, void *event) * which will propagate the WAL row LSN to * the LSM tree. */ - struct trigger *on_commit = region_alloc(&fiber()->gc, - sizeof(*on_commit)); + struct trigger *on_commit = txn_alloc(txn, sizeof(*on_commit)); if (on_commit == NULL) { diag_set(OutOfMemory, sizeof(*on_commit), - "region", "struct trigger"); + "txn region", "struct trigger"); rc = -1; break; } - struct trigger *on_rollback = region_alloc(&fiber()->gc, - sizeof(*on_commit)); + struct trigger *on_rollback = txn_alloc(txn, sizeof(*on_commit)); if (on_rollback == NULL) { diag_set(OutOfMemory, sizeof(*on_commit), - "region", "struct trigger"); + "txn region", "struct trigger"); rc = -1; break; } -- 2.21.0