Added thread::io_priority field and functions to get/set it.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27247 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2008-08-31 00:37:02 +00:00
parent 4612433715
commit 3b3e3805f8
3 changed files with 36 additions and 0 deletions

View File

@ -48,6 +48,9 @@ int32 thread_used_threads(void);
const char* thread_state_to_text(struct thread* thread, int32 state);
int32 thread_get_io_priority(thread_id id);
void thread_set_io_priority(int32 priority);
#define thread_get_current_thread arch_thread_get_current_thread
struct thread *thread_get_thread_struct(thread_id id);

View File

@ -240,6 +240,7 @@ struct thread {
char name[B_OS_NAME_LENGTH];
int32 priority;
int32 next_priority;
int32 io_priority;
int32 state;
int32 next_state;
struct cpu_ent *cpu;

View File

@ -234,6 +234,7 @@ create_thread_struct(struct thread *inthread, const char *name,
thread->team_next = NULL;
thread->queue_next = NULL;
thread->priority = thread->next_priority = -1;
thread->io_priority = -1;
thread->args1 = NULL; thread->args2 = NULL;
thread->alarm.period = 0;
reset_signals(thread);
@ -1991,6 +1992,37 @@ thread_state_to_text(struct thread* thread, int32 state)
}
int32
thread_get_io_priority(thread_id id)
{
// take a shortcut, if it is the current thread
struct thread* thread = thread_get_current_thread();
int32 priority;
if (id == thread->id) {
int32 priority = thread->io_priority;
return priority < 0 ? thread->priority : priority;
}
// not the current thread -- get it
InterruptsSpinLocker locker(gThreadSpinlock);
thread = thread_get_thread_struct_locked(id);
if (thread == NULL)
return B_BAD_THREAD_ID;
priority = thread->io_priority;
return priority < 0 ? thread->priority : priority;
}
void
thread_set_io_priority(int32 priority)
{
struct thread* thread = thread_get_current_thread();
thread->io_priority = priority;
}
status_t
thread_init(kernel_args *args)
{