Hallo Zusammen,
da ich schon sehr lange nach den Gründen suche für das Problem mit dem „Schnee“, hier mein Beitrag. Ich habe bewusst ein neues Thema eröffnet, da ich hier konkrete Ideen und Infos habe und auch nur dazu Beiträge sehen möchte. Sonst haben wir schnell wieder 10 Seiten und kein Ergebnis. Beachtet bitte, dass es sich hierbei um keine Anleitung zum umgehen des Fehlers handelt, sondern viel mehr helfen soll den Fehler zu beheben. Auch werde ich hier bewusst nicht schreiben, was ich alles getestet habe, sondern nur was das Ergebnis daraus ist. Ich hab dazu einfach keine Lust, weil es soviel ist, dass es mehrere DIN-A4 Seiten füllen würde.
Der Grund für das ganze Problem ist, dass ein Hardware-Overlay nicht sauber beendet wurde. Verursacht wird das ganze vom vdr-frontend. Betroffen sind alle aktuellen Treiber von Nvidia auch der 195er. Allerdings ist der 260er so anfällig, das man nur hier den Fehler auf passender Hardware reproduzieren kann. Bei den anderen Treibern passiert der Fehler sehr selten. Auch die Vermutung das VDPAU Schuld sei, kann ich nicht bestätigen, da ein vdr-frontend ohne VDPAU den gleichen Fehler verursacht. Versuche habe auch bestätig, dass der Fehler auch auf einem plain X-Server auftritt (also kein wm, xdm oder Hintergrundbild nur vdr-frontend).
Wie wird das ganze ausgelöst:
Aktuell lässt sich das ganze nur per Upstart auslösen oder per SIGKILL. Das heißt „stop vdr-frontend“ oder killall -9 vdr. Wer jetzt ankommt und sagt "bei mir passiert das auch wenn ich „restart vdr“ verwenden", dem reiß ich den Kopf ab, den ein „restart vdr“ löst auch nein stop vdr-frontend aus :D.
Erste Idee war das Upstart dann ein SIGKILL sendet und habe daher den kill timeout wert hoch gesetzt (sendet SIGKILL falls SIGTERM nicht reicht nach X Sekunden). Was aber leider zu keiner Behebung führte.
Was für Folgefehler treten auf:
Sobald der ursprüngliche Fehler einmal aufgetreten ist, ist der X-Server hinüber. Alles was auf diesem dann gezeichnet wird, was die Overlayfarbe trifft, wird von der Grafikkarte überzeichnet (z.B. Schnee- bzw. Durchzeichneneffekt). In XBMC kann man das schon in der Startanimation (Fade) sehen.
Mir ist auch aufgefallen, dass sobald der X-Server diesen Fehler hat, segfaults hin und wieder auftreten. Habe ich den Fehler gelöst z.B. durch das Neustarten des X-Servers, konnte ich noch keinen Segfault verzeichnen. Das ganze lässt sich auf unterschiedlichen Mainboard mit verschiedenen RAMS feststellen. Ja Memtest lief zu Sicherheit!
Lösung, Workaround und Ideen:
Wie geschrieben schein ein neustart des X-Servers nachdem dem beenden des vdr-frontend das Problem zu umgehen. Witziger weise kann man das ganze auch beheben, wenn man in Upstart-Script vom vdr-frontend das user change per su raus nimmt. Das auch dafür spricht das das ein SIGTERM gesendet wird. Allerdings hilft das nur beim vdr-sxfe. Xine wird weiterhin nicht sauber beendet, so dass es nicht alleine am su liegen kann.
Was mich interessieren würde, gibt es eine Möglichkeit eine Art Listener auf eine PID zu setzten um zusehen welches Signal beim beenden wirklich beim Frontend ankommt.
Der Fehler lässt sich mit einem auf der Konsole gestartetem Frontend nicht reproduzieren. Auch das Beenden per ESC des Frontend verursacht den Fehler nicht. Ich glaube daher weiter hin, dass der Treiber keine bzw. nur eine Teilschuld hat. Wir sollten daher den Fehler im Frontend suchen, da ich nicht glaube das Nvidia den Treiber so umbaut, das Programme die die Resourcen nicht sauber beenden / freigeben, vom Treiber aufgeräumt werden.