1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include "thread_dbP.h"
22:
23:
24: td_err_e
25: td_ta_clear_event (ta_arg, event)
26: const td_thragent_t *ta_arg;
27: td_thr_events_t *event;
28: {
29: td_thragent_t *const ta = (td_thragent_t *) ta_arg;
30: td_err_e err;
31: psaddr_t eventmask = 0;
32: void *copy = NULL;
33:
34: LOG ("td_ta_clear_event");
35:
36:
37: if (! ta_ok (ta))
38: return TD_BADTA;
39:
40:
41: err = DB_GET_SYMBOL (eventmask, ta, __nptl_threads_events);
42: if (err == TD_OK)
43: err = DB_GET_STRUCT (copy, ta, eventmask, td_thr_events_t);
44: if (err == TD_OK)
45: {
46: uint32_t idx;
47: for (idx = 0; idx < TD_EVENTSIZE; ++idx)
48: {
49: psaddr_t word;
50: uint32_t mask;
51: err = DB_GET_FIELD_LOCAL (word, ta, copy,
52: td_thr_events_t, event_bits, idx);
53: if (err != TD_OK)
54: break;
55: mask = (uintptr_t) word;
56: mask &= ~event->event_bits[idx];
57: word = (psaddr_t) (uintptr_t) mask;
58: err = DB_PUT_FIELD_LOCAL (ta, copy,
59: td_thr_events_t, event_bits, idx, word);
60: if (err != TD_OK)
61: break;
62: }
63: if (err == TD_NOAPLIC)
64: {
65: err = TD_OK;
66: while (idx < TD_EVENTSIZE)
67: if (event->event_bits[idx++] != 0)
68: {
69: err = TD_NOEVENT;
70: break;
71: }
72: }
73: if (err == TD_OK)
74:
75: err = DB_PUT_STRUCT (ta, eventmask, td_thr_events_t, copy);
76: }
77:
78: return err;
79: }