Prevent lockup due to browser causing out of memory condition, Don't start browser...
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Fri, 30 Nov 2018 11:28:38 +0000 (03:28 -0800)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Fri, 30 Nov 2018 11:28:38 +0000 (03:28 -0800)
CHANGELOG.md
MANIFEST.in
scripts/browser [new file with mode: 0755]
scripts/install.sh
scripts/xinitrc [changed mode: 0644->0755]
setup.py

index e58341197e14916490a3db44c77a746b91d5d30b..630943ed2835e36f4e80b6b4f950467ccdc5bea2 100644 (file)
@@ -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.
index 62b99b01b3fe72cf3b680958fc4880e890277603..24da8e0e26c9e5044c5262a5af26a00bae0f9a76 100644 (file)
@@ -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 (executable)
index 0000000..5bb9edf
--- /dev/null
@@ -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)
index 2b430330fda488ac4d9c9e79c8dd3e70e42f1a1e..fb21aa2f962fa99e11b0a13808ac8dbefcc5b475 100755 (executable)
@@ -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/
old mode 100644 (file)
new mode 100755 (executable)
index cd6aee7..146b686
@@ -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
index 2c83c270ef72289af51b04212e89950e2a166548..34eb89d89bf3f878515ffacb0319d27c0dba5c3b 100755 (executable)
--- 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,