diff --git a/dom/gamepad/windows/WindowsGamepad.cpp b/dom/gamepad/windows/WindowsGamepad.cpp
index 2cdd59f..8dfe2ae 100644
--- a/dom/gamepad/windows/WindowsGamepad.cpp
+++ b/dom/gamepad/windows/WindowsGamepad.cpp
@@ -882,13 +882,19 @@ WindowsGamepadService::Cleanup()
     mXInputPollTimer->Cancel();
   }
   mGamepads.Clear();
+  if (mObserver) {
+    mObserver->Stop();
+    mObserver = nullptr;
+  }
 }
 
 void
 WindowsGamepadService::DevicesChanged(DeviceChangeType type)
 {
   if (type == DeviceChangeNotification) {
-    mObserver->SetDeviceChangeTimer();
+    if (mObserver) {
+      mObserver->SetDeviceChangeTimer();
+    }
   } else if (type == DeviceChangeStable) {
     ScanForDevices();
   }

