genode/repos/base-sel4/src/lib/base/lock.cc
Norman Feske 40a5af42eb Clean up base-library structure
This patch moves the base library from src/base to src/lib/base,
flattens the library-internal directory structure, and moves the common
parts of the library-description files to base/lib/mk/base.inc and
base/lib/mk/base-common.inc.

Furthermore, the patch fixes a few cosmetic issues (whitespace and
comments only) that I encountered while browsing the result.

Fixes #1952
2016-05-09 13:24:11 +02:00

45 lines
784 B
C++

/*
* \brief Lock implementation
* \author Norman Feske
* \date 2007-10-15
*/
/*
* Copyright (C) 2007-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/cancelable_lock.h>
#include <cpu/atomic.h>
#include <cpu/memory_barrier.h>
/* seL4 includes */
#include <sel4/sel4.h>
using namespace Genode;
Cancelable_lock::Cancelable_lock(Cancelable_lock::State initial)
: _state(UNLOCKED), _owner(nullptr)
{
if (initial == LOCKED)
lock();
}
void Cancelable_lock::lock()
{
while (!Genode::cmpxchg(&_state, UNLOCKED, LOCKED))
seL4_Yield();
}
void Cancelable_lock::unlock()
{
Genode::memory_barrier();
_state = UNLOCKED;
}