Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1125934 authored by Woody Lin's avatar Woody Lin
Browse files

Watchdog: break timeout loop via system fatal crash

Request system fatal crash via SysRq when a watchdog timeout loop is
detected. This escapes automatically the device hanging symptom and also
preserves context of system server in memory snapshot.

More details and background: go/break-sys-watchdog-loop

Bug: 141948707
Test: Insert 'sleep_forever()' to block BinderThreadMonitor to reproduce
      watchdog timeout.
Change-Id: I3ae4b33b0d7811764c61663ac3718311b55fd048
parent 5d2e89e0
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -19,3 +19,11 @@ sysprop_library {
    api_packages: ["android.sysprop"],
    vendor_available: false,
}

sysprop_library {
    name: "com.android.sysprop.watchdog",
    srcs: ["WatchdogProperties.sysprop"],
    property_owner: "Platform",
    api_packages: ["android.sysprop"],
    vendor_available: false,
}
+45 −0
Original line number Diff line number Diff line
# Copyright (C) 2020 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

module: "android.sysprop.WatchdogProperties"
owner: Platform

# To escape the watchdog timeout loop, fatal reboot the system when
# watchdog timed out 'fatal_count' times in 'fatal_window_second'
# seconds, if both values are not 0. Default value of both is 0.
prop {
    api_name: "fatal_count"
    type: Integer
    prop_name: "framework_watchdog.fatal_count"
    scope: Internal
    access: Readonly
}

prop {
    api_name: "fatal_window_second"
    type: Integer
    prop_name: "framework_watchdog.fatal_window.second"
    scope: Internal
    access: Readonly
}

# The fatal counting can be disabled by setting property
# 'is_fatal_ignore' to true.
prop {
    api_name: "is_fatal_ignore"
    type: Boolean
    prop_name: "persist.debug.framework_watchdog.fatal_ignore"
    scope: Internal
    access: Readonly
}
+20 −0
Original line number Diff line number Diff line
props {
  module: "android.sysprop.WatchdogProperties"
  prop {
    api_name: "fatal_count"
    type: Integer
    scope: Internal
    prop_name: "framework_watchdog.fatal_count"
  }
  prop {
    api_name: "fatal_window_second"
    type: Integer
    scope: Internal
    prop_name: "framework_watchdog.fatal_window.second"
  }
  prop {
    api_name: "is_fatal_ignore"
    scope: Internal
    prop_name: "persist.debug.framework_watchdog.fatal_ignore"
  }
}
+20 −0
Original line number Diff line number Diff line
props {
  module: "android.sysprop.WatchdogProperties"
  prop {
    api_name: "fatal_count"
    type: Integer
    scope: Internal
    prop_name: "framework_watchdog.fatal_count"
  }
  prop {
    api_name: "fatal_window_second"
    type: Integer
    scope: Internal
    prop_name: "framework_watchdog.fatal_window.second"
  }
  prop {
    api_name: "is_fatal_ignore"
    scope: Internal
    prop_name: "persist.debug.framework_watchdog.fatal_ignore"
  }
}
+1 −0
Original line number Diff line number Diff line
@@ -132,6 +132,7 @@ java_library_static {
        "netd_aidl_interfaces-platform-java",
        "overlayable_policy_aidl-java",
        "SurfaceFlingerProperties",
        "com.android.sysprop.watchdog",
    ],
}

Loading