Das Image ist ein ganz normal selbstgebackenes.
Die start_neutrino:
Code: Alles auswählen
date -s 010101001970
sectionsd
timerd
camd2
if [ -e /var/etc/.pmt_update ] ; then
zapit -u
else
zapit
fi
controld
nhttpd
until neutrino -f -u ; do
echo "Neutrino exited with nonzero exit status, restarting..."
pidof sectionsd >/dev/null || sectionsd
pidof timerd >/dev/null || timerd
pidof camd2 >/dev/null || camd2
pidof zapit >/dev/null || zapit
pidof controld >/dev/null || controld
pidof nhttpd >/dev/null || nhttpd
done
pzapit -kill
[ -e /tmp/tuxmaild.pid ] && kill -TERM $( cat /tmp/tuxmaild.pid )
[ -e /tmp/tuxcald.pid ] && kill -TERM $( cat /tmp/tuxcald.pid )
[ -e /var/run/automount.pid ] && kill -TERM $( cat /var/run/automount.pid )
waittime=40
while expr $waittime != 0 > /dev/null
do
if pidof zapit > /dev/null; then echo "Waiting for zapit (max. $waittime seconds)"
else break;
fi
waittime=`expr $waittime - 1`
sleep 1
done
waittime=10
while expr $waittime != 0 > /dev/null
do
if pidof controld > /dev/null; then echo "Waiting for controld (max. $waittime seconds)"
elif pidof timerd > /dev/null; then echo "Waiting for timerd (max. $waittime seconds)"
else break;
fi
waittime=`expr $waittime - 1`
sleep 1
done
if [ -e /tmp/.reboot ] ; then
reboot
else
halt
fi
Wenn man nun die Meldung auf der Console beachtet, dann ensteht der Fehler ja in der Schleife hier. Demnach kann es also nur an Neutrino liegen, da die Meldung nur kommt wenn Neutrino keinen sauberen Rückgabewert liefert.
Code: Alles auswählen
until neutrino -f -u ; do
echo "Neutrino exited with nonzero exit status, restarting..."
pidof sectionsd >/dev/null || sectionsd
pidof timerd >/dev/null || timerd
pidof camd2 >/dev/null || camd2
pidof zapit >/dev/null || zapit
pidof controld >/dev/null || controld
pidof nhttpd >/dev/null || nhttpd
done
Jetzt frage ich mich natürlich welches Programm den Speichern vollhaut und Neutrino desshalb nicht ordentlich beendet werden kann.
Meine Vermutung geht nun in Richtung SectionsD.
Da ich ja geschrieben hatte, dass Neutrino danach wieder Muted startet, an Stelle das die Box ausgeht, komme ich durch diesen Abschnitt auf die Vermutung:
Code: Alles auswählen
if (frameBuffer != NULL)
delete frameBuffer;
if (g_settings.epg_dir.length() != 0) {
waitforshutdown = true;
AudioMute(true);
g_Sectionsd->writeSI2XML(g_settings.epg_dir.c_str());
}
else {
Das ist die einzige Stelle in ExitRun() wo Audio ausgeschaltet wird.
Mag es an den ganzen XML Files liegen die Sectiond da schreiben will?
Kann es sein, dass Sectionsd den Speicher mit den Daten vollhaut?
Übrigens würde mir noch eine Option gefallen mit der man das Schreiben des EPG-Cache abstellen kann.
Da ich weder eine HDD noch eine SD habe ist diese Option für mich total überflüssig. Zur Zeit wird alles in /tmp geschrieben.
Da /tmp beim Shutdown eh weg ist braucht sich SectionsD auch nicht damit beschäftigen die Dateien zu schreiben. Dies würde doch auch einen kleinen Geschwindigkeitszuwachs beim ausschalten bedeuten.
Gruß