root/src/libs/compat/freebsd_network/synch.cpp
/*
 * Copyright 2022, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT license.
 */

extern "C" {
#include <compat/sys/systm.h>
#include <compat/sys/kernel.h>
#include <compat/sys/mutex.h>
#include <compat/sys/condvar.h>
}

#include <condition_variable.h>


int
msleep(void* identifier, struct mtx* mutex, int priority,
        const char* description, int timeout)
{
        struct cv channel;
        __cv_ConditionVariable(&channel)->Publish(identifier, description);

        int status = cv_timedwait(&channel, mutex, timeout);

        __cv_ConditionVariable(&channel)->Unpublish();
        return status;
}


void
wakeup(void* identifier)
{
        ConditionVariable::NotifyAll(identifier, B_OK);
}


void
wakeup_one(void* identifier)
{
        ConditionVariable::NotifyOne(identifier, B_OK);
}