b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * This file and its contents are supplied under the terms of the
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * You may only use this file in accordance with the terms of version
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * 1.0 of the CDDL.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * A full copy of the text of the CDDL should have accompanied this
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * source. A copy of the CDDL is also available via the Internet at
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * condvar(9f)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* This is the API we're emulating */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* avoiding synch.h */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossint _lwp_cond_timedwait(lwp_cond_t *, lwp_mutex_t *, timespec_t *);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossint _lwp_cond_reltimedwait(lwp_cond_t *, lwp_mutex_t *, timespec_t *);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossstatic int cv__wait(kcondvar_t *, kmutex_t *, int);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossstatic clock_t cv__twait(kcondvar_t *, kmutex_t *, clock_t, int);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv_init(kcondvar_t *cv, char *name, kcv_type_t typ, void *arg)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv__wait(kcondvar_t *cv, kmutex_t *mp, int sigok)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross return (-1);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv_timedwait_sig(kcondvar_t *cv, kmutex_t *mp, clock_t abstime)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv_reltimedwait(kcondvar_t *cv, kmutex_t *mp, clock_t delta, time_res_t res)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv_reltimedwait_sig(kcondvar_t *cv, kmutex_t *mp, clock_t delta,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Factored out implementation of all the cv_*timedwait* functions.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Note that the delta passed in is relative to the (simulated)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * current time reported by ddi_get_lbolt(). Convert that to
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * timespec format and keep calling _lwp_cond_reltimedwait,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * which (NB!) decrements that delta in-place!
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rosscv__twait(kcondvar_t *cv, kmutex_t *mp, clock_t delta, int sigok)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross return (-1);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross return (-1);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross err = _lwp_cond_reltimedwait(cv, &mp->m_lock, &ts);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* FALLTHROUGH */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross return (-1);