143b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
243b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn/*--------------------------------------------------------------------*/
3278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn/*--- Private scheduler header.                        priv_sema.h ---*/
443b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn/*--------------------------------------------------------------------*/
543b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
643b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn/*
743b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   This file is part of Valgrind, a dynamic binary instrumentation
843b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   framework.
943b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
10ed39800a83baf5bffbe391f3974eb2af0f415f80Elliott Hughes   Copyright (C) 2000-2017 Julian Seward
1143b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn      jseward@acm.org
1243b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
1343b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   This program is free software; you can redistribute it and/or
1443b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   modify it under the terms of the GNU General Public License as
1543b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   published by the Free Software Foundation; either version 2 of the
1643b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   License, or (at your option) any later version.
1743b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
1843b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   This program is distributed in the hope that it will be useful, but
1943b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   WITHOUT ANY WARRANTY; without even the implied warranty of
2043b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2143b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   General Public License for more details.
2243b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
2343b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   You should have received a copy of the GNU General Public License
2443b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   along with this program; if not, write to the Free Software
2543b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
2643b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   02111-1307, USA.
2743b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
2843b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn   The GNU General Public License is contained in the file COPYING.
2943b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn*/
3043b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
31278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn#ifndef __PRIV_SEMA_H
32278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn#define __PRIV_SEMA_H
33cbdddcfb32883a37e873907602d34bac523e3eadsewardj
34535fb1b49a80f2e880f755ee618381de3e222ddfflorian#include "pub_core_basics.h"   // Bool
35535fb1b49a80f2e880f755ee618381de3e222ddfflorian
36278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn/* Not really a semaphore, but use a pipe for a token-passing scheme */
37278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njntypedef struct {
38f76d27a697a7b0bf3b84490baf60623fc96a23afnjn   Int  pipe[2];
39f76d27a697a7b0bf3b84490baf60623fc96a23afnjn   Int  owner_lwpid;  /* who currently has it */
40f76d27a697a7b0bf3b84490baf60623fc96a23afnjn   Bool held_as_LL;   /* if held, True == held by a _LL call */
41278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn} vg_sema_t;
42cbdddcfb32883a37e873907602d34bac523e3eadsewardj
43278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn// Nb: this may be OS-specific, but let's not factor it out until we
447b85dd57f12f86a03f51f7cedea46147ef937f82njn// implement an OS port for which this isn't ok.
457eb7c58d166ac00515ec757dcf9c7b0d177d28c9sewardjvoid ML_(sema_init)   ( vg_sema_t *sema );
467eb7c58d166ac00515ec757dcf9c7b0d177d28c9sewardjvoid ML_(sema_deinit) ( vg_sema_t *sema );
47f76d27a697a7b0bf3b84490baf60623fc96a23afnjnvoid ML_(sema_down)   ( vg_sema_t *sema, Bool as_LL );
48f76d27a697a7b0bf3b84490baf60623fc96a23afnjnvoid ML_(sema_up)     ( vg_sema_t *sema, Bool as_LL );
49cbdddcfb32883a37e873907602d34bac523e3eadsewardj
50278b3d6ff7b7a311ab49dff993b4aaf42b09ef13njn#endif   // __PRIV_SEMA_H
51cbdddcfb32883a37e873907602d34bac523e3eadsewardj
5243b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn/*--------------------------------------------------------------------*/
5343b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn/*--- end                                                          ---*/
5443b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn/*--------------------------------------------------------------------*/
5543b9a8abb139b86a24457fa3c19b9cb60ca17c3anjn
56