Mercurial > hg > CbC > CbC_gcc
comparison libitm/useraction.cc @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Copyright (C) 2008-2017 Free Software Foundation, Inc. | |
2 Contributed by Richard Henderson <rth@redhat.com>. | |
3 | |
4 This file is part of the GNU Transactional Memory Library (libitm). | |
5 | |
6 Libitm is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 3 of the License, or | |
9 (at your option) any later version. | |
10 | |
11 Libitm is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
13 FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
14 more details. | |
15 | |
16 Under Section 7 of GPL version 3, you are granted additional | |
17 permissions described in the GCC Runtime Library Exception, version | |
18 3.1, as published by the Free Software Foundation. | |
19 | |
20 You should have received a copy of the GNU General Public License and | |
21 a copy of the GCC Runtime Library Exception along with this program; | |
22 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
23 <http://www.gnu.org/licenses/>. */ | |
24 | |
25 #include "libitm_i.h" | |
26 | |
27 namespace GTM HIDDEN { | |
28 | |
29 void | |
30 gtm_thread::rollback_user_actions(size_t until_size) | |
31 { | |
32 for (size_t s = user_actions.size(); s > until_size; s--) | |
33 { | |
34 user_action *a = user_actions.pop(); | |
35 if (!a->on_commit) | |
36 a->fn (a->arg); | |
37 } | |
38 } | |
39 | |
40 | |
41 void | |
42 gtm_thread::commit_user_actions() | |
43 { | |
44 for (vector<user_action>::iterator i = user_actions.begin(), | |
45 ie = user_actions.end(); i != ie; i++) | |
46 { | |
47 if (i->on_commit) | |
48 i->fn (i->arg); | |
49 } | |
50 user_actions.clear(); | |
51 } | |
52 | |
53 } // namespace GTM | |
54 | |
55 using namespace GTM; | |
56 | |
57 void ITM_REGPARM | |
58 _ITM_addUserCommitAction(_ITM_userCommitFunction fn, | |
59 _ITM_transactionId_t tid, void *arg) | |
60 { | |
61 gtm_thread *tx = gtm_thr(); | |
62 if (tid != _ITM_noTransactionId) | |
63 GTM_fatal("resumingTransactionId in _ITM_addUserCommitAction must be " | |
64 "_ITM_noTransactionId"); | |
65 gtm_thread::user_action *a = tx->user_actions.push(); | |
66 a->fn = fn; | |
67 a->arg = arg; | |
68 a->on_commit = true; | |
69 a->resuming_id = tid; | |
70 } | |
71 | |
72 | |
73 void ITM_REGPARM | |
74 _ITM_addUserUndoAction(_ITM_userUndoFunction fn, void * arg) | |
75 { | |
76 gtm_thread *tx = gtm_thr(); | |
77 gtm_thread::user_action *a = tx->user_actions.push(); | |
78 a->fn = fn; | |
79 a->arg = arg; | |
80 a->on_commit = false; | |
81 } |