From 56c28b450fcb0f8241451ac24b851746d5874a5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20G=C3=BCnther?= Date: Tue, 1 Dec 2009 18:48:54 +0000 Subject: [PATCH] * Getting rid of the necessity for cleaning up initialized ConditionalVariables in uninit_condition_variables(). This method and its counterpart init_condition_variables() will be removed, once the need for the sConditionVariableHash will be eliminated. * Now every initialized ConditionalVariable gets removed right after it is no longer needed. Ingo what do you think? * This behaviour matches with the FreeBSD way, where a conditional variable gets assigned to a sleepqueue only when needed, and is removed from that sleepqueue the moment the condition is met. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34427 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/libs/compat/freebsd_network/Condvar.cpp | 15 +-------------- .../compat/freebsd_network/compat/sys/condvar.h | 2 +- src/libs/compat/freebsd_network/condvar.c | 10 +++++++++- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/libs/compat/freebsd_network/Condvar.cpp b/src/libs/compat/freebsd_network/Condvar.cpp index 81505ee405..c43273b8c2 100644 --- a/src/libs/compat/freebsd_network/Condvar.cpp +++ b/src/libs/compat/freebsd_network/Condvar.cpp @@ -54,20 +54,7 @@ init_condition_variables() void -uninit_condition_variables() -{ - ConditionVariableHashDefinition definition; - InterruptsSpinLocker hashLocker(sConditionVariablesLock); - ConditionVariable* variable = sConditionVariableHash.Clear(true); - hashLocker.Unlock(); - - while (variable != NULL) { - ConditionVariable* next = definition.GetLink(variable); - variable->Unpublish(); - delete variable; - variable = next; - } -} +uninit_condition_variables() {} } /* extern "C" */ diff --git a/src/libs/compat/freebsd_network/compat/sys/condvar.h b/src/libs/compat/freebsd_network/compat/sys/condvar.h index a646ba5bd9..a2ef47656e 100644 --- a/src/libs/compat/freebsd_network/compat/sys/condvar.h +++ b/src/libs/compat/freebsd_network/compat/sys/condvar.h @@ -10,7 +10,7 @@ struct cv { - int dummy; + const char* description; }; diff --git a/src/libs/compat/freebsd_network/condvar.c b/src/libs/compat/freebsd_network/condvar.c index 5c07802fb1..2251878a4e 100644 --- a/src/libs/compat/freebsd_network/condvar.c +++ b/src/libs/compat/freebsd_network/condvar.c @@ -12,7 +12,7 @@ void cv_init(struct cv* conditionVariable, const char* description) { - _cv_init(conditionVariable, description); + conditionVariable->description = description; } @@ -26,17 +26,25 @@ int cv_timedwait(struct cv* conditionVariable, struct mtx* mutex, int timeout) { int status; + _cv_init(conditionVariable, conditionVariable->description); + mtx_unlock(mutex); status = _cv_timedwait_unlocked(conditionVariable, timeout); mtx_lock(mutex); + _cv_destroy(conditionVariable); + return status; } void cv_wait(struct cv* conditionVariable, struct mtx* mutex) { + _cv_init(conditionVariable, conditionVariable->description); + mtx_unlock(mutex); _cv_wait_unlocked(conditionVariable); mtx_lock(mutex); + + _cv_destroy(conditionVariable); }