diff options
| author | thorpej <thorpej@NetBSD.org> | 2000-06-28 06:51:17 +0000 |
|---|---|---|
| committer | thorpej <thorpej@NetBSD.org> | 2000-06-28 06:51:17 +0000 |
| commit | e24d6ebc19561e932fbc4320178a61746bab4435 (patch) | |
| tree | 7898254ce3d6f7af71cf4f5632551ecc4393b8a7 /sys/dev/sysmon/sysmon.c | |
| parent | 8890e2439a8c257d874c8bb10c20660c5646886c (diff) | |
Fix a couple of brain-o's in error cases, and use PCATCH for
the sysmon mutex wait.
Diffstat (limited to 'sys/dev/sysmon/sysmon.c')
| -rw-r--r-- | sys/dev/sysmon/sysmon.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/dev/sysmon/sysmon.c b/sys/dev/sysmon/sysmon.c index ae19c5b676b..d0d62bff7a6 100644 --- a/sys/dev/sysmon/sysmon.c +++ b/sys/dev/sysmon/sysmon.c @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon.c,v 1.1 2000/06/24 00:37:20 thorpej Exp $ */ +/* $NetBSD: sysmon.c,v 1.2 2000/06/28 06:51:17 thorpej Exp $ */ /*- * Copyright (c) 2000 Zembu Labs, Inc. @@ -82,7 +82,7 @@ void sysmon_init(void) { - lockinit(&sysmon_lock, PWAIT, "sysmon", 0, 0); + lockinit(&sysmon_lock, PWAIT|PCATCH, "sysmon", 0, 0); sysmon_initialized = 1; } @@ -168,6 +168,8 @@ sysmonioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) { struct envsys_tre_data *tred = (void *) data; + tred->validflags = 0; + sme = sysmon_envsys_find(tred->sensor); if (sme == NULL) break; @@ -175,8 +177,6 @@ sysmonioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) tred->sensor = SME_SENSOR_IDX(sme, tred->sensor); if (tred->sensor < sme->sme_nsensors) error = (*sme->sme_gtredata)(sme, tred); - else - tred->validflags = 0; tred->sensor = oidx; sysmon_envsys_release(sme); break; @@ -187,6 +187,10 @@ sysmonioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) struct envsys_basic_info *binfo = (void *) data; sme = sysmon_envsys_find(binfo->sensor); + if (sme == NULL) { + binfo->validflags = 0; + break; + } oidx = binfo->sensor; binfo->sensor = SME_SENSOR_IDX(sme, binfo->sensor); if (binfo->sensor < sme->sme_nsensors) @@ -202,13 +206,15 @@ sysmonioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) { struct envsys_basic_info *binfo = (void *) data; + binfo->validflags = 0; + sme = sysmon_envsys_find(binfo->sensor); + if (sme == NULL) + break; oidx = binfo->sensor; binfo->sensor = SME_SENSOR_IDX(sme, binfo->sensor); if (binfo->sensor < sme->sme_nsensors) *binfo = sme->sme_sensor_info[binfo->sensor]; - else - binfo->validflags = 0; binfo->sensor = oidx; sysmon_envsys_release(sme); break; |
