aos/lib/libc/sys/barrelfish/lock.c
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

76 lines
1.7 KiB
C

/**
* \file
* \brief Barrelfish libc lock backend. These functions are used in
* lib/newlib/newlib/libc/include/sys/lock.h
*/
/*
* Copyright (c) 2014, ETH Zurich.
* All rights reserved.
*
* This file is distributed under the terms in the attached LICENSE file.
* If you do not find this file, copies can be found by writing to:
* ETH Zurich D-INFK, CAB F.78, Universitaetstrasse 6, CH-8092 Zurich,
* Attn: Systems Group.
*/
#include <sys/lock.h>
#include <assert.h>
#include <aos/aos.h>
#include <aos/curdispatcher_arch.h>
#include <aos/threads.h>
static void make_work_disabled(void)
{
dispatcher_handle_t handle = curdispatcher();
struct dispatcher_shared_generic* disp =
get_dispatcher_shared_generic(handle);
if (disp->disabled) {
disp->disabled = 0;
}
}
void bf_libc_lock_init(struct thread_mutex *lock)
{
thread_mutex_init(lock);
}
void bf_libc_lock_close(struct thread_mutex *lock)
{ }
void bf_libc_lock_acquire(struct thread_mutex *lock)
{
make_work_disabled();
thread_mutex_lock(lock);
}
void bf_libc_lock_acquire_recursive(struct thread_mutex *lock)
{
make_work_disabled();
thread_mutex_lock_nested(lock);
}
void bf_libc_lock_try_acquire(struct thread_mutex *lock)
{
make_work_disabled();
thread_mutex_trylock(lock);
}
void bf_libc_lock_try_acquire_recursive(struct thread_mutex *lock)
{
// can't do try_acquire_recursive
assert(!"NYI");
}
void bf_libc_lock_release(struct thread_mutex *lock)
{
dispatcher_handle_t handle = curdispatcher();
struct dispatcher_shared_generic* disp =
get_dispatcher_shared_generic(handle);
if (disp->disabled) {
thread_mutex_unlock_disabled(curdispatcher(), lock);
} else {
thread_mutex_unlock(lock);
}
}