Lines Matching defs:sema

3 /*--- Semaphore stuff.                                      sema.c ---*/
44 Slower (than the removed futex-based sema scheme) but more portable
55 void ML_(sema_init)(vg_sema_t *sema)
59 r = VG_(pipe)(sema->pipe);
62 vg_assert(sema->pipe[0] != sema->pipe[1]);
64 sema->pipe[0] = VG_(safe_fd)(sema->pipe[0]);
65 sema->pipe[1] = VG_(safe_fd)(sema->pipe[1]);
68 VG_(debugLog)(0,"zz","sema_init: %d %d\n", sema->pipe[0],
69 sema->pipe[1]);
70 vg_assert(sema->pipe[0] != sema->pipe[1]);
72 sema->owner_lwpid = -1;
79 INNER_REQUEST(ANNOTATE_RWLOCK_CREATE(sema));
80 INNER_REQUEST(ANNOTATE_BENIGN_RACE_SIZED(&sema->owner_lwpid,
81 sizeof(sema->owner_lwpid), ""));
82 res = VG_(write)(sema->pipe[1], buf, 1);
86 void ML_(sema_deinit)(vg_sema_t *sema)
88 vg_assert(sema->owner_lwpid != -1); /* must be initialised */
89 vg_assert(sema->pipe[0] != sema->pipe[1]);
90 INNER_REQUEST(ANNOTATE_RWLOCK_DESTROY(sema));
91 VG_(close)(sema->pipe[0]);
92 VG_(close)(sema->pipe[1]);
93 sema->pipe[0] = sema->pipe[1] = -1;
94 sema->owner_lwpid = -1;
98 void ML_(sema_down)( vg_sema_t *sema, Bool as_LL )
104 vg_assert(sema->owner_lwpid != lwpid); /* can't have it already */
105 vg_assert(sema->pipe[0] != sema->pipe[1]);
109 ret = VG_(read)(sema->pipe[0], buf, 1);
110 INNER_REQUEST(ANNOTATE_RWLOCK_ACQUIRED(sema, /*is_w*/1));
125 sema->owner_lwpid = lwpid;
126 sema->held_as_LL = as_LL;
130 void ML_(sema_up)( vg_sema_t *sema, Bool as_LL )
134 vg_assert(as_LL == sema->held_as_LL);
137 vg_assert(sema->owner_lwpid != -1); /* must be initialised */
138 vg_assert(sema->pipe[0] != sema->pipe[1]);
139 vg_assert(sema->owner_lwpid == VG_(gettid)()); /* must have it */
141 sema->owner_lwpid = 0;
143 INNER_REQUEST(ANNOTATE_RWLOCK_RELEASED(sema, /*is_w*/1));
144 ret = VG_(write)(sema->pipe[1], buf, 1);