mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-09 06:22:46 +00:00
72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
/*
|
|
* \brief Libc-internal kernel API
|
|
* \author Christian Helmuth
|
|
* \author Emery Hemingway
|
|
* \date 2016-12-14
|
|
*
|
|
* TODO document libc tasking including
|
|
* - the initial thread (which is neither component nor pthread)
|
|
* - processes incoming signals and forwards to entrypoint
|
|
* - the main thread (which is the kernel and the main user context)
|
|
* - pthreads (which are pthread user contexts only)
|
|
*/
|
|
|
|
/*
|
|
* Copyright (C) 2016-2017 Genode Labs GmbH
|
|
*
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
* under the terms of the GNU Affero General Public License version 3.
|
|
*/
|
|
|
|
#ifndef _LIBC__TASK_H_
|
|
#define _LIBC__TASK_H_
|
|
|
|
namespace Libc {
|
|
|
|
/**
|
|
* Resume all user contexts
|
|
*
|
|
* This resumes the main user context as well as any pthread context.
|
|
*/
|
|
void resume_all();
|
|
|
|
/**
|
|
* Suspend the execution of the calling user context
|
|
*
|
|
* \param timeout_ms maximum time to stay suspended in milliseconds,
|
|
* 0 for infinite suspend
|
|
*
|
|
* \return remaining duration until timeout,
|
|
* 0 if the timeout expired
|
|
*
|
|
* The context could be running on the component entrypoint as main context
|
|
* or as separate pthread. This function returns after the libc kernel
|
|
* resumed the user context execution.
|
|
*/
|
|
struct Suspend_functor { virtual bool suspend() = 0; };
|
|
unsigned long suspend(Suspend_functor &, unsigned long timeout_ms = 0UL);
|
|
|
|
void dispatch_pending_io_signals();
|
|
|
|
/**
|
|
* Get time since startup in ms
|
|
*/
|
|
unsigned long current_time();
|
|
|
|
/**
|
|
* Suspend main user context and the component entrypoint
|
|
*
|
|
* This interface is solely used by the implementation of fork().
|
|
*/
|
|
void schedule_suspend(void (*suspended) ());
|
|
|
|
struct Select_handler_base;
|
|
|
|
/**
|
|
* Schedule select handler that is deblocked by ready fd sets
|
|
*/
|
|
void schedule_select(Select_handler_base *);
|
|
}
|
|
|
|
#endif /* _LIBC__TASK_H_ */
|