Loading...
iokit/Kernel/IOPMPowerSource.cpp xnu-4570.71.2 xnu-1228
--- xnu/xnu-4570.71.2/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;