unzuverlässiges internet + datenupdate = hänger

Ideen, wie TV-Browser verbessert werden kann
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

auf arbeit hab ich immer mal wieder proxy-probleme mit dem ergebnis, dass das datenupdate nicht durchläuft. das ganze scheint aber kein timeout zu haben (oder zumindest ein extrem langes) und abbrechen kann man es auch nicht. links oben gibt es zwar ein rotes kreuz mit dem tooltip 'aktualisierung abbrechen', aber da tut sich schlicht gar nichts. der ladebalken rechts unten bleibt irgendwo auf halben weg hängen und beenden kann man den tvb auch nicht mehr (meldung: ein datenupdate läuft - tvb wird beendet sobald abgeschlossen). ich kann den tvb dann immer nur abschießen und neu starten.

verbesserungsvorschlag: der abbrechen-button sollte funktionieren und es sollte ein timeout für das datenupdate geben.
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von ds10 »

Es gibt schon einen Timeout unter Technische Einstellungen->Netzwerk, der gilt dann allerdings pro Verbindung. Wenn also z.B. 50 neue Dateien geladen werden sollen und die Verbindung komplett nicht reagiert, dann heißt das 50 * Timeout. Wenn ich mich richtig erinnere liegt der Timeout standardmäßig bei 60 Sekunden. Also je nach Anzahl kann das schon sehr lange dauern bis das Update durch den Timeout abgebrochen wird.

Wenn der Abbrechen-Button nicht funktioniert, ist das aber ein Bug.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von ds10 »

Ich habe das Abbrechen jetzt probiert und hier funktioniert es, möglicherweise tritt das Problem nur dann auf, wenn auch die Internetverbindung blockiert.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

ich hab jetzt gerade wieder diese situation. habe den tvb gestartet + datenupdate. dann vielleicht ne stunde später nochmal update -> hängt bei 'lade tv-daten herunter' bei ca 2/3 der fortschrittsanzeige. ich konnte aber ganz normal mit wirschauen weiterarbeiten - das inet funktioniert grundsätzlich also schon (bzw wieder). ich lasse jetzt einfach den tvb mal weiterlaufen und gucke, was passiert. kann mir aber nicht vorstellen, dass hier wirklich das timeout noch am ticken ist. zum einen, weil da nach der kurzen zeit nicht allzuviele aktualisierungen kommen dürften (zumal ich vergleichweise wenig sender in der liste hab, 11 um genau zu sein) und zum anderen, weil das inet ja wieder da ist und jetzt ein verbindungstimeout gar nicht mehr anschlagen dürfte.
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

ca 4h rum und der tvb steht immernoch an der gleichen stelle. hab jetzt den abbrechen-button gedrück, aber da tut sich wie gesagt nichts. wenn ich den tvb schließen will, kommt die meldung, dass noch ein datenupdate läuft. einzige möglichkeit ist jetzt, ihn abzuschießen.
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von ds10 »

Klingt als würde eine Exception das Update unterbrechen, aber ich wüsste jetzt auch nicht an welcher Stelle die auftreten soll.

[ Post made via Android ] Bild
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

ich hatte jetzt das logging mal aktiviert. falls irgendwo eine exception fliegt, sollte die da ja zu sehen sein, richtig? ich kann den fehler halt auch nicht willentlich provozieren, von daher wirds wohl wieder ein paar wochen dauern...
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von ds10 »

Leider ja nicht, wenn eine Exception in einem anderen Thread auftritt stehen die oft nur auf der Konsole, manche sieht man sogar gar nicht, wenn man keine try{ }catch(Throwable t){t.printStackTrace();}-Anweisung an der richtigen Stelle platziert hat.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

gibt es eine bequeme möglichkeit, die konsole in eine datei umzuleiten? (ansonsten verbesserungsvorschlag: bei allen gespawnten threads in run() einen try-catch-block für alles setzen, der eine exception wenigstens noch ins log schreibt, bevor er abschmiert ;).)
Benutzeravatar
Agrivaine
Moderator
Beiträge: 810
Registriert: 21 Nov 2007, 14:39
Kontaktdaten:

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von Agrivaine »

Ja, indem du ihn per cmd/bash aufrufst:

Code: Alles auswählen

java -Dpropertiesfile=windows.properties -jar tvbrowser.jar > log.txt 2>&1
Damit landen die Ausgaben im aktuellen Verzeichnis in der Datei log.txt. TVB funktioniert aber sonst wie gehabt. "2" ist stderr (hier landen eigentlich die Fehlerausgaben) und wird mittels ">&1" auf die Standardausgabe "1" (stdout) umgeleitet, wobei aber bereits "1" in die Datei log.txt umgeleitet wurde = alle Ausgaben (Standard + Fehler) landen in der Textdatei.
Gestern standen wir vor dem Abgrund; heute sind wir bereits einen Schritt weiter...
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

so, ist mal wieder aufgetreten. wie versprochen, anbei das log. gibt nicht allzuviel her, aber vielleicht hilft es ja. wenn nicht, muss ich den tvb ab jetzt immer von der konsole aus starten und auf den nächsten hänger warten. aber dann kann ich zumindest einen thread dump machen und die ausgaben auf der konsole hätte ich auch.
Dateianhänge
tvbrowser.log
(81.76 KiB) 243-mal heruntergeladen
v6ph1
Site Admin
Beiträge: 1276
Registriert: 13 Jan 2008, 05:07
Wohnort: Radebeul

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von v6ph1 »

Da kommt nix weiter im Log?

Die nächste Meldung müsste "Loading {URL}" sein und die kommt vor(!) dem eigentlichen Download.
(siehe tvbrowser.util.io.DownloadManager.downloadThreadRun() )

Konsole + Threaddump wäre sehr hilfreich.

Eine kurze Frage noch:
Wie sieht die CPU-Last beim Hängenbleiben aus?

-- v6ph1

PS: Kann man das vllt. mit ziehen des Netzwerkkabels simulieren?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von ds10 »

v6ph1 hat geschrieben:PS: Kann man das vllt. mit ziehen des Netzwerkkabels simulieren?
Das hatte ich schon versucht, hat bei mir aber nicht zum Hängenbleiben geführt.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

puh, cpu-last hatte ich jetzt natürlich nicht im blick. guck ich, wenn es das nächste mal auftaucht. und nein, das war das vollständige log nachdem der tvb ca ne halbe stunde oder so hing. bzw hängt er ja nicht wirklich. das datenupdate hängt, aber man kann ganz normal arbeiten. nur beenden kann man ihn nicht.
uzi
Site Admin
Beiträge: 2293
Registriert: 02 Jul 2009, 14:32

Re: unzuverlässiges internet + datenupdate = hänger

Beitrag von uzi »

glück gehabt, hab heut schon wieder den zustand. in der konsole ist auch nicht mehr zu sehen, als im log. das hilft also nicht weiter. thread dump:

Code: Alles auswählen

Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode):

"Thread-11" prio=2 tid=0x000000000e5f2800 nid=0x126c waiting on condition [0x000000000ec1f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.extras.reminderplugin.ReminderPlugin$3$1.run(ReminderPlugin.java:206)

"TV data update" prio=2 tid=0x000000000e5f6000 nid=0xf20 waiting on condition [0x000000000dfef000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at util.io.DownloadManager.runDownload(DownloadManager.java:94)
        at tvbrowserdataservice.TvBrowserDataService.updateTvData(TvBrowserDataService.java:289)
        at tvbrowser.core.tvdataservice.DefaultTvDataServiceProxy.updateTvData(DefaultTvDataServiceProxy.java:98)
        at tvbrowser.core.TvDataUpdater.downloadTvData(TvDataUpdater.java:257)
        at tvbrowser.ui.mainframe.MainFrame$38.run(MainFrame.java:2307)

"Store settings periodically" prio=2 tid=0x000000000e5f3000 nid=0x15dc waiting on condition [0x000000000213f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.TVBrowser$3.run(TVBrowser.java:724)

"TimerQueue" daemon prio=6 tid=0x000000000eaed800 nid=0x17b0 waiting on condition [0x00000000107ce000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000784f1c308> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
        at java.util.concurrent.DelayQueue.take(Unknown Source)
        at javax.swing.TimerQueue.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"DestroyJavaVM" prio=6 tid=0x00000000002fb000 nid=0x684 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"pool-1-thread-4" prio=6 tid=0x000000000f0cd000 nid=0x165c waiting on condition [0x000000001053e000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"pool-1-thread-3" prio=6 tid=0x000000000f0cc000 nid=0x1354 waiting on condition [0x00000000103de000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"pool-1-thread-2" prio=6 tid=0x000000000f0c8000 nid=0x1648 waiting on condition [0x000000000ee9f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"pool-1-thread-1" prio=6 tid=0x000000000f0c7000 nid=0x8d0 waiting on condition [0x000000001019f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at tvbrowser.core.plugin.PluginProxyManager$5.run(PluginProxyManager.java:1323)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"AWT-EventQueue-0" prio=6 tid=0x000000000b6cf000 nid=0x17c8 in Object.wait() [0x000000000f00b000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000007ddf582d0> (a tvbrowser.ui.mainframe.MainFrame$38)
        at java.lang.Thread.join(Unknown Source)
        - locked <0x00000007ddf582d0> (a tvbrowser.ui.mainframe.MainFrame$38)
        at java.lang.Thread.join(Unknown Source)
        at tvbrowser.ui.mainframe.MainFrame$27.run(MainFrame.java:1513)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at util.ui.textcomponentpopup.TextComponentPopupEventQueue.dispatchEvent(TextComponentPopupEventQueue.java:55)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.WaitDispatchSupport$2.run(Unknown Source)
        at java.awt.WaitDispatchSupport$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(Unknown Source)
        at java.awt.Dialog.show(Unknown Source)
        at java.awt.Component.show(Unknown Source)
        at java.awt.Component.setVisible(Unknown Source)
        at java.awt.Window.setVisible(Unknown Source)
        at java.awt.Dialog.setVisible(Unknown Source)
        at tvbrowser.ui.mainframe.MainFrame.quit(MainFrame.java:1524)
        at tvbrowser.ui.mainframe.MainFrame.quit(MainFrame.java:1490)
        at tvbrowser.ui.mainframe.MainFrame.quit(MainFrame.java:1486)
        at tvbrowser.ui.tray.SystemTray$6.windowClosing(SystemTray.java:222)
        at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
        at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
        at java.awt.Window.processWindowEvent(Unknown Source)
        at javax.swing.JFrame.processWindowEvent(Unknown Source)
        at java.awt.Window.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at util.ui.textcomponentpopup.TextComponentPopupEventQueue.dispatchEvent(TextComponentPopupEventQueue.java:55)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

"AWT-Windows" daemon prio=6 tid=0x000000000b709000 nid=0x112c runnable [0x000000000d2cf000]
   java.lang.Thread.State: RUNNABLE
        at sun.awt.windows.WToolkit.eventLoop(Native Method)
        at sun.awt.windows.WToolkit.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"AWT-Shutdown" prio=6 tid=0x000000000b8c6000 nid=0x14ac in Object.wait() [0x000000000d0ff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784de1010> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:503)
        at sun.awt.AWTAutoShutdown.run(Unknown Source)
        - locked <0x0000000784de1010> (a java.lang.Object)
        at java.lang.Thread.run(Unknown Source)

"Java2D Disposer" daemon prio=10 tid=0x000000000b736800 nid=0x4f8 in Object.wait() [0x000000000cf9f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784d0ea98> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x0000000784d0ea98> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at sun.java2d.Disposer.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"Service Thread" daemon prio=6 tid=0x000000000b5f8000 nid=0x14e8 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=10 tid=0x000000000b5ef800 nid=0x14f8 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=10 tid=0x000000000b5db000 nid=0xb04 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" daemon prio=10 tid=0x000000000b5da000 nid=0x1374 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x000000000b5d2800 nid=0x15b0 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=8 tid=0x00000000024fb000 nid=0x1718 in Object.wait() [0x000000000c29f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784f1d468> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x0000000784f1d468> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Reference Handler" daemon prio=10 tid=0x00000000024f3800 nid=0x1594 in Object.wait() [0x000000000c41f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x0000000784f50ed0> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:503)
        at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
        - locked <0x0000000784f50ed0> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x00000000024f0800 nid=0x13b8 runnable

"GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000002309000 nid=0x6b0 runnable

"GC task thread#1 (ParallelGC)" prio=6 tid=0x000000000230a800 nid=0x1694 runnable

"GC task thread#2 (ParallelGC)" prio=6 tid=0x000000000230c800 nid=0x1540 runnable

"GC task thread#3 (ParallelGC)" prio=6 tid=0x000000000230e000 nid=0x1474 runnable

"VM Periodic Task Thread" prio=10 tid=0x000000000b602800 nid=0x1674 waiting on condition

JNI global references: 2996

Heap
 PSYoungGen      total 164352K, used 17966K [0x00000007d5f00000, 0x00000007e9c00000, 0x0000000800000000)
  eden space 131072K, 1% used [0x00000007d5f00000,0x00000007d617c7b0,0x00000007ddf00000)
  from space 33280K, 46% used [0x00000007ddf00000,0x00000007dee0f358,0x00000007dff80000)
  to   space 31232K, 0% used [0x00000007e7d80000,0x00000007e7d80000,0x00000007e9c00000)
 ParOldGen       total 86016K, used 50561K [0x0000000781e00000, 0x0000000787200000, 0x00000007d5f00000)
  object space 86016K, 58% used [0x0000000781e00000,0x0000000784f604e0,0x0000000787200000)
 PSPermGen       total 22528K, used 22294K [0x000000077cc00000, 0x000000077e200000, 0x0000000781e00000)
  object space 22528K, 98% used [0x000000077cc00000,0x000000077e1c5b28,0x000000077e200000)

allerdings muss ich dazu anmerken, dass ich vor dem dump schon auf 'schließen' bei tvb geklickt hatte. das ist also nicht ganz der urzustand. wie auch immer, riecht nach deadlock. alle threads sind am warten. insbesondere auch der thread "TV data update".
Antworten