freebsd compat. layer: only init taskqueue_fast if FBSD_FAST_TASKQUEUE requirement is set (since it starts a thread and consumes a couple semaphores).

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21073 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Hugo Santos
2007-05-08 16:53:13 +00:00
parent b6ace498dd
commit adf9024529
2 changed files with 13 additions and 8 deletions
@@ -89,6 +89,7 @@ extern int __haiku_driver_requirements;
enum { enum {
FBSD_TASKQUEUES = 1 << 0, FBSD_TASKQUEUES = 1 << 0,
FBSD_FAST_TASKQUEUE = 1 << 1,
}; };
#define HAIKU_DRIVER_REQUIREMENTS(flags) \ #define HAIKU_DRIVER_REQUIREMENTS(flags) \
@@ -12,6 +12,7 @@
#include <util/list.h> #include <util/list.h>
#include <compat/sys/taskqueue.h> #include <compat/sys/taskqueue.h>
#include <compat/sys/haiku-module.h>
struct task { struct task {
int ta_priority; int ta_priority;
@@ -267,6 +268,7 @@ task_init(struct task *t, int prio, task_handler_t handler, void *context)
status_t status_t
init_taskqueues() init_taskqueues()
{ {
if (HAIKU_DRIVER_REQUIRES(FBSD_FAST_TASKQUEUE)) {
taskqueue_fast = taskqueue_create_fast("fast taskq", 0, taskqueue_fast = taskqueue_create_fast("fast taskq", 0,
taskqueue_thread_enqueue, NULL); taskqueue_thread_enqueue, NULL);
if (taskqueue_fast == NULL) if (taskqueue_fast == NULL)
@@ -276,6 +278,7 @@ init_taskqueues()
taskqueue_free(taskqueue_fast); taskqueue_free(taskqueue_fast);
return B_ERROR; return B_ERROR;
} }
}
return B_OK; return B_OK;
} }
@@ -284,5 +287,6 @@ init_taskqueues()
void void
uninit_taskqueues() uninit_taskqueues()
{ {
if (HAIKU_DRIVER_REQUIRES(FBSD_FAST_TASKQUEUE))
taskqueue_free(taskqueue_fast); taskqueue_free(taskqueue_fast);
} }