11#include " trade_v1/trade.hpp"
2+ #include " trade_v1/private/meta.hpp"
23
34#include < condition_variable>
45#include < cstdio>
@@ -153,20 +154,20 @@ struct trade_v1::Private::Static {
153154trade_v1::Private::access_base_t *
154155trade_v1::Private::insert (transaction_base_t *transaction,
155156 atom_mono_t *access_atom,
156- size_t align_m1,
157- size_t size) {
157+ const meta_t &meta) {
158158 auto root = transaction->m_accesses ;
159159
160160 auto access_ix = lock_ix_of (access_atom);
161161
162162 if (!root) {
163- auto access = Static::alloc_align (transaction, align_m1 );
164- if (Static::alloc_limit (transaction, access, size )) {
163+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
164+ if (Static::alloc_limit (transaction, access, meta. m_access_size )) {
165165 access->m_children [0 ] = nullptr ;
166166 access->m_children [1 ] = nullptr ;
167167 access->m_atom = access_atom;
168168 access->m_state = INITIAL;
169169 access->m_lock_ix = access_ix;
170+ access->m_destroy = meta.m_destroy ;
170171 return transaction->m_accesses = access;
171172 } else {
172173 throw transaction;
@@ -188,13 +189,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
188189 *side_near[0 ] = nullptr ;
189190 *side_near[1 ] = root->m_children [1 ];
190191 root->m_children [1 ] = side_root[1 ];
191- auto access = Static::alloc_align (transaction, align_m1 );
192- if (Static::alloc_limit (transaction, access, size )) {
192+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
193+ if (Static::alloc_limit (transaction, access, meta. m_access_size )) {
193194 access->m_children [0 ] = side_root[0 ];
194195 access->m_children [1 ] = root;
195196 access->m_atom = access_atom;
196197 access->m_state = INITIAL;
197198 access->m_lock_ix = access_ix;
199+ access->m_destroy = meta.m_destroy ;
198200 return transaction->m_accesses = access;
199201 } else {
200202 root->m_children [0 ] = side_root[0 ];
@@ -213,13 +215,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
213215 if (!next) {
214216 *side_near[0 ] = nullptr ;
215217 *side_near[1 ] = root;
216- auto access = Static::alloc_align (transaction, align_m1);
217- if (Static::alloc_limit (transaction, access, size)) {
218+ auto access =
219+ Static::alloc_align (transaction, meta.m_access_align_m1 );
220+ if (Static::alloc_limit (transaction, access, meta.m_access_size )) {
218221 access->m_children [0 ] = side_root[0 ];
219222 access->m_children [1 ] = side_root[1 ];
220223 access->m_atom = access_atom;
221224 access->m_state = INITIAL;
222225 access->m_lock_ix = access_ix;
226+ access->m_destroy = meta.m_destroy ;
223227 return transaction->m_accesses = access;
224228 } else {
225229 root->m_children [0 ] = side_root[0 ];
@@ -239,13 +243,14 @@ trade_v1::Private::insert(transaction_base_t *transaction,
239243 *side_near[0 ] = root->m_children [0 ];
240244 *side_near[1 ] = nullptr ;
241245 root->m_children [0 ] = side_root[0 ];
242- auto access = Static::alloc_align (transaction, align_m1 );
243- if (Static::alloc_limit (transaction, access, size )) {
246+ auto access = Static::alloc_align (transaction, meta. m_access_align_m1 );
247+ if (Static::alloc_limit (transaction, access, meta. m_access_size )) {
244248 access->m_children [0 ] = root;
245249 access->m_children [1 ] = side_root[1 ];
246250 access->m_atom = access_atom;
247251 access->m_state = INITIAL;
248252 access->m_lock_ix = access_ix;
253+ access->m_destroy = meta.m_destroy ;
249254 return transaction->m_accesses = access;
250255 } else {
251256 root->m_children [1 ] = side_root[1 ];
@@ -264,13 +269,15 @@ trade_v1::Private::insert(transaction_base_t *transaction,
264269 if (!next) {
265270 *side_near[0 ] = root;
266271 *side_near[1 ] = nullptr ;
267- auto access = Static::alloc_align (transaction, align_m1);
268- if (Static::alloc_limit (transaction, access, size)) {
272+ auto access =
273+ Static::alloc_align (transaction, meta.m_access_align_m1 );
274+ if (Static::alloc_limit (transaction, access, meta.m_access_size )) {
269275 access->m_children [0 ] = side_root[0 ];
270276 access->m_children [1 ] = side_root[1 ];
271277 access->m_atom = access_atom;
272278 access->m_state = INITIAL;
273279 access->m_lock_ix = access_ix;
280+ access->m_destroy = meta.m_destroy ;
274281 return transaction->m_accesses = access;
275282 } else {
276283 root->m_children [1 ] = side_root[1 ];
0 commit comments