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