/*
* Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2001 Internet Software Consortium.
*
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: condition.c,v 1.23 2007/06/18 23:47:49 tbox Exp $ */
#include <config.h>
#include <isc/condition.h>
#include <isc/assertions.h>
#define LSIGNAL 0
HANDLE h;
/*
* This handle is shared across all threads
*/
if (h == NULL) {
/* XXX */
return (ISC_R_UNEXPECTED);
}
/*
* The threadlist will hold the actual events needed
* for the wait condition
*/
return (ISC_R_SUCCESS);
}
/*
* Add the thread to the threadlist along with the required events
*/
static isc_result_t
{
return (ISC_R_NOMEMORY);
/*
* Create the thread-specific handle
*/
return (ISC_R_UNEXPECTED);
}
/*
* Add the thread ID and handles to list of threads for broadcast
*/
/*
* The thread is holding the manager lock so this is safe
*/
return (ISC_R_SUCCESS);
}
static isc_result_t
{
/*
* Look for the thread ID.
*/
threadcond != NULL;
return (ISC_R_SUCCESS);
}
}
/*
* Not found, so add it.
*/
}
/*
* Unlike pthreads, the caller MUST hold the lock associated with
* the condition variable when calling us.
*/
/* XXX */
return (ISC_R_UNEXPECTED);
}
return (ISC_R_SUCCESS);
}
/*
* Unlike pthreads, the caller MUST hold the lock associated with
* the condition variable when calling us.
*/
/*
* Notify every thread registered for this
*/
threadcond != NULL;
}
if (failed)
return (ISC_R_UNEXPECTED);
return (ISC_R_SUCCESS);
}
/*
* Delete the threadlist
*/
while (threadcond != NULL) {
threadcond = next;
}
return (ISC_R_SUCCESS);
}
/*
* This is always called when the mutex (lock) is held, but because
* we are waiting we need to release it and reacquire it as soon as the wait
* is over. This allows other threads to make use of the object guarded
* by the mutex but it should never try to delete it as long as the
* number of waiters > 0. Always reacquire the mutex regardless of the
* result of the wait. Note that EnterCriticalSection will wait to acquire
* the mutex.
*/
static isc_result_t
/*
* Get the thread events needed for the wait
*/
if (tresult != ISC_R_SUCCESS)
return (tresult);
if (result == WAIT_FAILED) {
/* XXX */
return (ISC_R_UNEXPECTED);
}
if (result == WAIT_TIMEOUT)
return (ISC_R_TIMEDOUT);
return (ISC_R_SUCCESS);
}
}
isc_time_t *t) {
/* XXX */
return (ISC_R_UNEXPECTED);
}
milliseconds = 0xFFFFFFFF;
else
}