Loading...
--- xnu/xnu-2422.100.13/iokit/Kernel/IOPMPowerSource.cpp
+++ xnu/xnu-1228/iokit/Kernel/IOPMPowerSource.cpp
@@ -165,6 +165,7 @@
void IOPMPowerSource::setPSProperty(const OSSymbol *key, OSObject *val)
{
OSObject *lastVal;
+ OSNumber *newNumVal;
if(!key || !val) return;
@@ -174,12 +175,19 @@
// Otherwise, just compare pointers.
if( (lastVal = properties->getObject(key)) ) {
- if(val->isEqualTo(lastVal)) {
- // settings didn't change
- } else {
- // num val is not equal to last val
- settingsChangedSinceUpdate = true;
- }
+ newNumVal = OSDynamicCast(OSNumber, val);
+ if(newNumVal) {
+ if(newNumVal->isEqualTo(lastVal)) {
+ // settings didn't change
+ } else {
+ // num val is not equal to last val
+ settingsChangedSinceUpdate = true;
+ }
+ } else {
+ // pointer compare as last resort
+ if(lastVal != val)
+ settingsChangedSinceUpdate = true;
+ }
} else {
// new setting; no last value
settingsChangedSinceUpdate = true;