A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 67 lines 1.8 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2007 by Daniel Ankers 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22#include "config.h" 23#include "corelock.h" 24/* Core locks using Peterson's mutual exclusion algorithm. */ 25 26#ifdef CPU_ARM 27#include "arm/corelock.c" 28#else 29 30void corelock_lock(struct corelock *cl) 31{ 32 const unsigned int core = CURRENT_CORE; 33 const unsigned int othercore = 1 - core; 34 35 cl->myl[core] = core; 36 cl->turn = othercore; 37 38 for (;;) 39 { 40 if (cl->myl[othercore] == 0 || cl->turn == core) 41 break; 42 } 43} 44 45int corelock_try_lock(struct corelock *cl) 46{ 47 const unsigned int core = CURRENT_CORE; 48 const unsigned int othercore = 1 - core; 49 50 cl->myl[core] = core; 51 cl->turn = othercore; 52 53 if (cl->myl[othercore] == 0 || cl->turn == core) 54 { 55 return 1; 56 } 57 58 cl->myl[core] = 0; 59 return 0; 60} 61 62void corelock_unlock(struct corelock *cl) 63{ 64 cl->myl[CURRENT_CORE] = 0; 65} 66 67#endif