diff --git a/service/java/com/android/server/wifi/WifiLogger.java b/service/java/com/android/server/wifi/WifiLogger.java
index 168a9a4..91711eb 100644
--- a/service/java/com/android/server/wifi/WifiLogger.java
+++ b/service/java/com/android/server/wifi/WifiLogger.java
@@ -92,6 +92,10 @@
     }
 
     public synchronized void startLogging(boolean verboseEnabled) {
+        if (verboseEnabled == false) {
+            Log.d(TAG, "Not enabling logger to work around issues");
+            return;
+        }
         WifiNative.setLoggingEventHandler(mHandler);
         if (verboseEnabled) {
             mLogLevel = VERBOSE_LOG_WITH_WAKEUP;
@@ -125,10 +129,12 @@
     }
 
     public synchronized void stopLogging() {
-        WifiNative.setLoggingEventHandler(null);
-        stopLoggingAllBuffers();
-        mRingBuffers = null;
-        mLogLevel = VERBOSE_NO_LOG;
+        if (mLogLevel != VERBOSE_NO_LOG) {
+            WifiNative.setLoggingEventHandler(null);
+            stopLoggingAllBuffers();
+            mRingBuffers = null;
+            mLogLevel = VERBOSE_NO_LOG;
+        }
     }
 
     public synchronized void captureBugReportData(int reason) {
@@ -372,15 +378,17 @@
         report.errorCode = errorCode;
         report.time = System.currentTimeMillis();
 
-        for (WifiNative.RingBufferStatus buffer : mRingBuffers) {
-            /* this will push data in mRingBuffers */
-            WifiNative.getRingBufferData(buffer.name);
-            LimitedCircularArray<byte[]> data = mRingBufferData.get(buffer.name);
-            byte[][] buffers = new byte[data.size()][];
-            for (int i = 0; i < data.size(); i++) {
-                buffers[i] = data.get(i).clone();
+        if (mRingBuffers != null) {
+            for (WifiNative.RingBufferStatus buffer : mRingBuffers) {
+                /* this will push data in mRingBuffers */
+                WifiNative.getRingBufferData(buffer.name);
+                LimitedCircularArray<byte[]> data = mRingBufferData.get(buffer.name);
+                byte[][] buffers = new byte[data.size()][];
+                for (int i = 0; i < data.size(); i++) {
+                    buffers[i] = data.get(i).clone();
+                }
+                report.ringBuffers.put(buffer.name, buffers);
             }
-            report.ringBuffers.put(buffer.name, buffers);
         }
 
         if (captureFWDump) {
