>     New erase method and placement new for aatree.
>     
>             * aatree.h (aa_tree::remove): New.
>             (aa_tree::operator new): Add placement new.

Ok.

>     Change pr_hasElse to the value specified in the ABI.
>     
>             * libitm.h (_ITM_codeProperties): Change pr_hasElse to the ABI's 
> value.

Ok.

>     Add information to dispatch about closed nesting and uninstrumented code.
>     
>             * dispatch.h (GTM::abi_dispatch): Add can_run_uninstrumented_code 
> and
>             closed_nesting flags, as well as a closed nesting alternative.
>             * method-serial.cc: Same.

Nearly...

> +  virtual abi_dispatch* closed_nesting_alternative()
> +  {
> +    // For nested transactions with an instrumented code path, we can do
> +    // undo logging.
> +    return GTM::dispatch_serial();

Surely you really mean dispatch_serial_ul here?
Otherwise ok.

>     Use vector instead of list to store user actions.
>     
>       * useraction.cc: Use vector instead of list to store actions.
>       Also support partial rollbacks for closed nesting.
>       * libitm_i.h (GTM::gtm_transaction::user_action): Same.
>       * beginend.cc: Same.

Ok.

>     Add closed nesting as restart reason.
>     
>       * libitm_i.h: Add closed nesting as restart reason.
>       * retry.cc (GTM::gtm_transaction::decide_retry_strategy): Same.

Ok, except

> +  if (r == RESTART_CLOSED_NESTING) retry_serial = true;

Coding style.  THEN statement on the next line, even for small THEN.

>     Make flat nesting the default, use closed nesting on demand.
>     
>             * local.cc (gtm_transaction::rollback_local): Support closed 
> nesting.
>             * eh_cpp.cc (GTM::gtm_transaction::revert_cpp_exceptions): Same.
>       * dispatch.h: Same.
>       * method-serial.cc: Same.
>             * beginend.cc (GTM::gtm_transaction::begin_transaction): Change to
>             flat nesting as default, and closed nesting on demand.
>             (GTM::gtm_transaction::rollback): Same.
>             (_ITM_abortTransaction): Same.
>             (GTM::gtm_transaction::restart): Same.
>             (GTM::gtm_transaction::trycommit): Same.
>             (GTM::gtm_transaction::trycommit_and_finalize): Removed.
>             (choose_code_path): New.
>             (GTM::gtm_transaction_cp::save): New.
>             (GTM::gtm_transaction_cp::commit): New.
>             * query.cc (_ITM_inTransaction): Support flat nesting.
>             * libitm_i.h (GTM::gtm_transaction_cp): New helper struct for 
> nesting.
>             (GTM::gtm_transaction): Support flat and closed nesting.
>             * alloc.cc (commit_allocations_2): New.
>             (commit_cb_data): New helper struct.
>             (GTM::gtm_transaction::commit_allocations): Handle nested
>             commits/rollbacks.
>             * libitm.texi: Update user action section, add description of 
> nesting.

Nearly...

> +          abi_dispatch *cn_disp = disp->closed_nesting_alternative();
> +          if (cn_disp)
> +            {
> +              disp = cn_disp;
> +              set_abi_disp(disp);
> +            }

Don't we need to fini the old disp?  Seems there's a leak here, though
not visible until we re-instate the non-serial methods.

> +  if (!(tx->state & STATE_IRREVOCABLE)) ret |= a_saveLiveVariables;

Coding style.



r~

Reply via email to