Mercurial > illumos > illumos-gate
changeset 867:1d5e94400592
4766208 alarm(2) does not work with arguments larger than 2^31/100 on Solaris 2.6 thru Nevada.
author | peterte |
---|---|
date | Tue, 08 Nov 2005 02:22:36 -0800 |
parents | 08bb8e0ae066 |
children | 09ef7c98db8f |
files | usr/src/uts/common/syscall/alarm.c |
diffstat | 1 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/syscall/alarm.c Mon Nov 07 18:10:17 2005 -0800 +++ b/usr/src/uts/common/syscall/alarm.c Tue Nov 08 02:22:36 2005 -0800 @@ -24,8 +24,8 @@ /* - * Copyright (c) 1999-2001 by Sun Microsystems, Inc. - * All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" @@ -80,6 +80,17 @@ ret = 0; else ret = (del + hz - 1) / hz; /* convert to seconds */ + + /* + * Our implementation defined limit for alarm is + * INT_MAX / hz. Anything larger gets truncated + * to that limit. If deltat is negative we can + * assume a wrap has occurred so peg deltat in + * that case too. + */ + if (deltat > (INT_MAX / hz) || deltat < 0) + deltat = INT_MAX / hz; + if (deltat) p->p_alarmid = realtime_timeout(sigalarm2proc, p, deltat * hz); mutex_exit(&p->p_lock);