diff options
| author | gmcgarry <gmcgarry@NetBSD.org> | 2008-09-05 21:58:32 +0000 |
|---|---|---|
| committer | gmcgarry <gmcgarry@NetBSD.org> | 2008-09-05 21:58:32 +0000 |
| commit | 2b28c4e8869495bbfe146070a57362892355d8f7 (patch) | |
| tree | 99eab32739dd3fc6fd2a01cb83c7b623e005fe47 /sys/dev/sysmon | |
| parent | 44a82a460df1c8e91bb23bd6dfaeeed5fe6254c9 (diff) | |
Rearrange sysmonread_power() to have a single exit point, which simplifies
the locking and fixes -Wunreachable-code warning.
Diffstat (limited to 'sys/dev/sysmon')
| -rw-r--r-- | sys/dev/sysmon/sysmon_power.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/sys/dev/sysmon/sysmon_power.c b/sys/dev/sysmon/sysmon_power.c index e7d9a9e9b89..f04f021a87c 100644 --- a/sys/dev/sysmon/sysmon_power.c +++ b/sys/dev/sysmon/sysmon_power.c @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_power.c,v 1.39 2008/08/22 11:27:50 pgoyette Exp $ */ +/* $NetBSD: sysmon_power.c,v 1.40 2008/09/05 21:58:32 gmcgarry Exp $ */ /*- * Copyright (c) 2007 Juan Romero Pardines. @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sysmon_power.c,v 1.39 2008/08/22 11:27:50 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_power.c,v 1.40 2008/09/05 21:58:32 gmcgarry Exp $"); #include "opt_compat_netbsd.h" #include <sys/param.h> @@ -431,6 +431,7 @@ int sysmonread_power(dev_t dev, struct uio *uio, int flags) { power_event_t pev; + int rv; /* We only allow one event to be read at a time. */ if (uio->uio_resid != POWER_EVENT_MSG_SIZE) @@ -439,19 +440,21 @@ sysmonread_power(dev_t dev, struct uio *uio, int flags) mutex_enter(&sysmon_power_event_queue_mtx); for (;;) { if (sysmon_get_power_event(&pev)) { - mutex_exit(&sysmon_power_event_queue_mtx); - return uiomove(&pev, POWER_EVENT_MSG_SIZE, uio); + rv = uiomove(&pev, POWER_EVENT_MSG_SIZE, uio); + break; } if (flags & IO_NDELAY) { - mutex_exit(&sysmon_power_event_queue_mtx); - return EWOULDBLOCK; + rv = EWOULDBLOCK; + break; } cv_wait(&sysmon_power_event_queue_cv, &sysmon_power_event_queue_mtx); } mutex_exit(&sysmon_power_event_queue_mtx); + + return rv; } /* |
