diff options
| author | Fredrik Holmqvist <fredrik.holmqvist@gmail.com> | 2012-07-31 20:44:01 +0200 |
|---|---|---|
| committer | Fredrik Holmqvist <fredrik.holmqvist@gmail.com> | 2012-07-31 20:51:02 +0200 |
| commit | 57e2ce542e59a69f405a60f1ab7a3e0e54e4f6a2 (patch) | |
| tree | 8becb5044e30b9d3f36a0d1dd8f474e4024e2ace | |
| parent | 66f16cca0a9ce2084680038f2fa0c3aa2649700b (diff) | |
CID-701956: list_remove_head_item may return null.hrev44449
Simplified from while (1) to while that checks sem directly.
| -rw-r--r-- | src/libs/compat/freebsd_network/taskqueue.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/libs/compat/freebsd_network/taskqueue.c b/src/libs/compat/freebsd_network/taskqueue.c index 10b03bf104..b4cf6d1c35 100644 --- a/src/libs/compat/freebsd_network/taskqueue.c +++ b/src/libs/compat/freebsd_network/taskqueue.c @@ -116,16 +116,14 @@ tq_handle_thread(void *data) sem = tq->tq_sem; tq_unlock(tq, cpu_state); - while (1) { - status_t status = acquire_sem(sem); - if (status < B_OK) - break; - + while (acquire_sem(sem) == B_NO_ERROR) { tq_lock(tq, &cpu_state); t = list_remove_head_item(&tq->tq_list); + tq_unlock(tq, cpu_state); + if (t == NULL) + continue; pending = t->ta_pending; t->ta_pending = 0; - tq_unlock(tq, cpu_state); t->ta_handler(t->ta_argument, pending); } @@ -319,7 +317,7 @@ init_taskqueues() return B_NO_MEMORY; status = taskqueue_start_threads(&taskqueue_fast, 1, - B_REAL_TIME_PRIORITY, "fast taskq"); + B_REAL_TIME_PRIORITY, "fast taskq thread"); if (status < B_OK) goto err_1; } |
