mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-16 06:08:16 +00:00
Rework the internal lock interface
With this patch, the 'futex' syscall gets used for blocking and unblocking of threads in the Linux-specific lock implementation. The 'Native_thread_id' type, which was previously used in the lock-internal 'Applicant' class to identify a thread to be woken up, was not suitable anymore for implementing this change. With this patch, the 'Thread_base*' type gets used instead, which also has the positive effect of making the public 'cancelable_lock.h' header file platform-independent. Fixes #646.
This commit is contained in:
committed by
Norman Feske
parent
7fef0ba931
commit
a99193ad90
@ -147,7 +147,7 @@ namespace Genode {
|
||||
/**
|
||||
* Return badge for faulting thread
|
||||
*/
|
||||
unsigned long badge() const { return _last.tid; }
|
||||
unsigned long badge() const { return _last; }
|
||||
|
||||
/**
|
||||
* Return true if page fault was a write fault
|
||||
|
@ -37,31 +37,7 @@ namespace Genode {
|
||||
static void copy(void* dst, Native_capability_tpl<Cap_dst_policy>* src);
|
||||
};
|
||||
|
||||
struct Native_thread_id
|
||||
{
|
||||
typedef Cap_dst_policy::Dst Dst;
|
||||
|
||||
Dst tid;
|
||||
|
||||
/**
|
||||
* Pointer to thread's running lock
|
||||
*
|
||||
* Once initialized (see 'lock_helper.h'), it will point to the
|
||||
* '_running_lock' field of the thread's 'Native_thread' structure,
|
||||
* which is part of the thread context. This member variable is
|
||||
* used by the lock implementation only.
|
||||
*/
|
||||
struct Codezero::l4_mutex *running_lock;
|
||||
|
||||
Native_thread_id() { }
|
||||
|
||||
/**
|
||||
* Constructor (used as implicit constructor)
|
||||
*/
|
||||
Native_thread_id(Dst l4id) : tid(l4id), running_lock(0) { }
|
||||
|
||||
Native_thread_id(Dst l4id, Codezero::l4_mutex *rl) : tid(l4id), running_lock(rl) { }
|
||||
};
|
||||
typedef Cap_dst_policy::Dst Native_thread_id;
|
||||
|
||||
struct Native_thread
|
||||
{
|
||||
@ -111,9 +87,6 @@ namespace Genode {
|
||||
return (Codezero::l4_mutex *)&_running_lock; }
|
||||
};
|
||||
|
||||
inline bool operator == (Native_thread_id t1, Native_thread_id t2) { return t1.tid == t2.tid; }
|
||||
inline bool operator != (Native_thread_id t1, Native_thread_id t2) { return t1.tid != t2.tid; }
|
||||
|
||||
typedef Native_capability_tpl<Cap_dst_policy> Native_capability;
|
||||
typedef int Native_connection_state;
|
||||
|
||||
|
Reference in New Issue
Block a user