From 6bf40ad31cfd17fad0b966bbbfba2a14619569c1 Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Fri, 30 Nov 2018 03:28:38 -0800 Subject: [PATCH] Prevent lockup due to browser causing out of memory condition, Don't start browser if HDMI not enabled --- CHANGELOG.md | 1 + MANIFEST.in | 1 + scripts/browser | 28 ++++++++++++++++++++++++++++ scripts/install.sh | 12 ++++++++++++ scripts/xinitrc | 7 +++++-- setup.py | 1 + 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100755 scripts/browser mode change 100644 => 100755 scripts/xinitrc diff --git a/CHANGELOG.md b/CHANGELOG.md index e583411..630943e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Buildbotics CNC Controller Firmware Changelog - Run simulation at low process priority. - Added ``Bug Report`` button to ``Admin`` -> ``General``. - Only render 3D view as needed to save CPU. + - Prevent lockup due to browser causing out of memory condition. ## v0.4.1 - Fix toolpath view axes bug. diff --git a/MANIFEST.in b/MANIFEST.in index 62b99b0..24da8e0 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,5 +3,6 @@ include package.json README.md scripts/install.sh include src/avr/bbctrl-avr-firmware.hex include scripts/avr109-flash.py include scripts/buildbotics.gc +include scripts/xinitrc recursive-include src/py/camotics * global-exclude .gitignore diff --git a/scripts/browser b/scripts/browser new file mode 100755 index 0000000..5bb9edf --- /dev/null +++ b/scripts/browser @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +import os +import sys +import resource +import subprocess + +# Limit memory usage +limit = 1.5e9 +resource.setrlimit(resource.RLIMIT_DATA, (limit, limit)) + +# Clear browser errors +prefs = '/home/pi/.config/chromium/Default/Preferences' +subprocess.run( + ('sed', '-i', 's/"exited_cleanly":false/"exited_cleanly":true/', prefs)) +subprocess.run( + ('sed', '-i', 's/"exit_type":"Crashed"/"exit_type":"Normal"/', prefs)) + +# Start browser +cmd = '/usr/lib/chromium-browser/chromium-browser' +args = ( + '--no-first-run', + '--disable-infobars', + '--noerrdialogs', + '--single-process', + 'http://localhost/' +) +os.execvp(cmd, args) diff --git a/scripts/install.sh b/scripts/install.sh index 2b43033..fb21aa2 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -89,6 +89,18 @@ if [ ! -e /etc/udev/rules.d/11-automount.rules ]; then REBOOT=true fi +# Increase swap +grep 'CONF_SWAPSIZE=1000' /etc/dphys-swapfile >/dev/null +if [ $? -ne 0 ]; then + sed -i 's/^CONF_SWAPSIZE=.*$/CONF_SWAPSIZE=1000/' /etc/dphys-swapfile + REBOOT=true +fi + +# Install xinitrc +cp scripts/xinitrc ~pi/.xinitrc +chmod +x ~pi/.xinitrc +chown pi:pi ~pi/.xinitrc + # Install default GCode if [ ! -d /var/lib/bbctrl/upload -o -z "$(ls -A /var/lib/bbctrl/upload)" ]; then mkdir -p /var/lib/bbctrl/upload/ diff --git a/scripts/xinitrc b/scripts/xinitrc old mode 100644 new mode 100755 index cd6aee7..146b686 --- a/scripts/xinitrc +++ b/scripts/xinitrc @@ -5,6 +5,9 @@ xset s off xset s noblank while true; do - chromium-browser http://localhost/ \ - --user-data-dir=/tmp/browse --no-first-run + tvservice -s 2>&1 | grep "state 0x40001" >/dev/null + if [ $? -ne 0 ]; then + /usr/local/bin/browser + fi + sleep 1 done diff --git a/setup.py b/setup.py index 2c83c27..34eb89d 100755 --- a/setup.py +++ b/setup.py @@ -30,6 +30,7 @@ setup( 'scripts/sethostname', 'scripts/reset-video', 'scripts/config-wifi', + 'scripts/browser', ], install_requires = 'tornado sockjs-tornado pyserial pyudev smbus2'.split(), zip_safe = False, -- 2.27.0