lwp_timer.c revision fd6545c7635d9e2c255b9853396af7e1305b3758
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * CDDL HEADER START
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * The contents of this file are subject to the terms of the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * Common Development and Distribution License (the "License").
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * You may not use this file except in compliance with the License.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * or http://www.opensolaris.org/os/licensing.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * See the License for the specific language governing permissions
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * and limitations under the License.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * When distributing Covered Code, include this CDDL HEADER in each
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * If applicable, add the following below this CDDL HEADER, with the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * fields enclosed by brackets "[]" replaced with your own identifying
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * information: Portions Copyright [yyyy] [name of copyright owner]
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * CDDL HEADER END
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * Use is subject to license terms.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#pragma ident "%Z%%M% %I% %E% SMI"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy * lwp_timer_timeout() is called from a timeout set up in lwp_cond_wait(),
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * lwp_mutex_timedlock(), lwp_sema_timedwait() or lwp_rwlock_lock().
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * It recomputes the time remaining until the absolute time when the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * wait is supposed to timeout and either calls realtime_timeout()
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy * to reschedule itself or calls setrun() on the sleeping thread.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * This is done to ensure that the waiting thread does not wake up
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy * due to timer expiration until the absolute future time of the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * timeout has been reached. Until that time, the thread must
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy * remain on its sleep queue.
thread_lock(t);
setrun_locked(t);
thread_unlock(t);
int error = 0;
goto err;
goto err;
goto err;
goto err;
err:
return (error);
return (tim);
return (error);
return (error);