videotext plugin fehlerhaft ??
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Irgendwo hier im Thread wurde geschrieben das es einfach am zu wenigen Speicher liegt das der Tuxtxt nicht mehr läuft ich habe die Sache mal ein bißchen laufen lassen und sehe das etwas anders.
Ich kann die Box Wochen vielleicht auch Monate laufen lassen, mache ich Tuxtxt an geht er. Aber lief der Tuxtxt schon einmal dann läuft dieser am nächsten ca. Tag nicht mehr. Also sollte das nicht am vorhandenen Speicher liegen da die Box ja Wochen laufen kann und dann den Tuxtxt starten.
Ich kann die Box Wochen vielleicht auch Monate laufen lassen, mache ich Tuxtxt an geht er. Aber lief der Tuxtxt schon einmal dann läuft dieser am nächsten ca. Tag nicht mehr. Also sollte das nicht am vorhandenen Speicher liegen da die Box ja Wochen laufen kann und dann den Tuxtxt starten.
-
- Einsteiger
- Beiträge: 191
- Registriert: Dienstag 30. Dezember 2003, 01:49
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Hmm, was war das so unwichtig?Metallica hat geschrieben:*unwichtig*
Hat eventl. noch jemand Ideen, irgendwie haut das mit den wenigen Recurcen alles nicht hin.
Selbst mit 600kb freien Speicher und sehr wenig buffer starten alle Games, auch das Dreamchess sowies Tuxcom oder andere Plugins nur der Tuxtxt nicht mehr. Da ist was am Tuxtxt faul.
Wenn jemand Ideen hat, bin immer gerne bereit Patches oder Tipps durchzutesten.
-
- Senior Member
- Beiträge: 1260
- Registriert: Samstag 6. Oktober 2001, 00:00
Tja, Fakt ist nunmal imo das der Aufruf von pthread_create() fehlschlägt und dafür gibt's laut Manpage nur 2 Fehlerursachen:irgendwie haut das mit den wenigen Recurcen alles nicht hin.
1) not enough system resources to create a process for the new thread
2) more than PTHREAD_THREADS_MAX threads are already active
Das die Fehlerausgabe "Interrupted system call" vom TuxTxt falsch sein dürfte habe ich schon mal erwähnt.
Warum nun allerdings der Returnwert der aufgerufenen Funktion tuxtxt_start_thread() nicht geprüft wird und TuxTxt trotz des Fehlers fröhlich weitermacht entzieht sich meiner Kenntnis.
Da ich den Code aber nur kurz überflogen habe bin ich auch schon wieder still und überlasse das den 2 Jungs die sich da inzwischen viel besser auskennen.
-
- Senior Member
- Beiträge: 1339
- Registriert: Donnerstag 24. April 2003, 12:12
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Versteh das ganze zwar nicht so ganz, aber wenn sich das ganze so schwer fixen lässt wäre es dann nicht sinnvoll das wenn tuxtxt startet dieser sich ram reservert jedesmal?
Ich habe das bei dreamchess gesehen, wenn man dieses startet und beendet sind nachher statt 600kb aufeinmal ca 2MB oder mehr frei.
Ich habe das bei dreamchess gesehen, wenn man dieses startet und beendet sind nachher statt 600kb aufeinmal ca 2MB oder mehr frei.
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
Tja, ich kann das (leider) auf der Dreambox nicht nachvollziehen, da klappt das ohne Probleme .
Tritt der Fehler auch bei Enigma oder nur bei Neutrino auf?
Ghost hatte da vor einiger Zeit mal was bzgl. der Threads in Enigma gefixt. Vorher wurde bei jedem Aufruf eines Plugins (nicht nur Tuxtxt) ein Teil des Speichers nicht wieder freigegeben. Evtl. stimmt da ja bei Neutrino auch irgendwas nicht...
Läßt sich das irgendwie zeitlich eingrenzen, seit welcher Version von Tuxtxt der Fehler "existiert" ?
dbluelle
Tritt der Fehler auch bei Enigma oder nur bei Neutrino auf?
Ghost hatte da vor einiger Zeit mal was bzgl. der Threads in Enigma gefixt. Vorher wurde bei jedem Aufruf eines Plugins (nicht nur Tuxtxt) ein Teil des Speichers nicht wieder freigegeben. Evtl. stimmt da ja bei Neutrino auch irgendwas nicht...
Läßt sich das irgendwie zeitlich eingrenzen, seit welcher Version von Tuxtxt der Fehler "existiert" ?
dbluelle
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Die ersten Probs gab es damals ab v1.57, das mit dem nicht mehr aufrufen können evtl. 1.7x. Genau kann ich das leider nicht mehr sagen, sorry.dbluelle hat geschrieben:Tja, ich kann das (leider) auf der Dreambox nicht nachvollziehen, da klappt das ohne Probleme .
Tritt der Fehler auch bei Enigma oder nur bei Neutrino auf?
Ghost hatte da vor einiger Zeit mal was bzgl. der Threads in Enigma gefixt. Vorher wurde bei jedem Aufruf eines Plugins (nicht nur Tuxtxt) ein Teil des Speichers nicht wieder freigegeben. Evtl. stimmt da ja bei Neutrino auch irgendwas nicht...
Läßt sich das irgendwie zeitlich eingrenzen, seit welcher Version von Tuxtxt der Fehler "existiert" ?
dbluelle
Also Qasi eingrenzen lässt sich nicht mehr.
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Ja, habe Enigma nun einige Zeit laufen gehabt.dbluelle hat geschrieben:Tja, ich kann das (leider) auf der Dreambox nicht nachvollziehen, da klappt das ohne Probleme .
Tritt der Fehler auch bei Enigma oder nur bei Neutrino auf?
Ist genau das gleiche Verhalten, Tuxtext einmal gestartet, beim nächsten Aufruf ca 1 Tag später geht dieser nicht mehr.
Tuxtxt Cache ist aus, sollte vielleicht auch Standart in Enigma dbox2 sein.
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
Durch eure Diskussion über den sectionsd bin ich noch auf eine Möglichkeit gekommen:
Tuxtxt arbeitet in der jetzigen Form auf der Dbox (vor allem durch die Komprimierung) viel mit malloc() und free().
Dadurch kommt es hier vielleicht auch zu einer ziemlichen Speicherfragmentierung.
Evtl. wäre es mal ganz gut, die Komprimierung auszuschalten...
(Also einfach in tuxtxt_def.h das #define TUXTXT_COMPRESS auf 0 setzen)
Falls es wirklich an der Speicherfragmentierung liegt,
gibt's da noch mehr Optimierungspotential,
aber bevor ich mich da rein kniee, wüsste ich gern, in welche "Richtung" man da gehen soll .
Also wäre es z.B. gut, die Freigabe des Cache anders zu gestalten (evtl. so in der Art eines Stacks last in-> first out) ?
Oder läuft es dann doch eher darauf hinaus, mehr oder weniger eine eigene "Speicherverwaltung" für Tuxtxt zu programmieren (Das dürfte allerdings ziemlich komplex werden ) ?
dbluelle
Tuxtxt arbeitet in der jetzigen Form auf der Dbox (vor allem durch die Komprimierung) viel mit malloc() und free().
Dadurch kommt es hier vielleicht auch zu einer ziemlichen Speicherfragmentierung.
Evtl. wäre es mal ganz gut, die Komprimierung auszuschalten...
(Also einfach in tuxtxt_def.h das #define TUXTXT_COMPRESS auf 0 setzen)
Falls es wirklich an der Speicherfragmentierung liegt,
gibt's da noch mehr Optimierungspotential,
aber bevor ich mich da rein kniee, wüsste ich gern, in welche "Richtung" man da gehen soll .
Also wäre es z.B. gut, die Freigabe des Cache anders zu gestalten (evtl. so in der Art eines Stacks last in-> first out) ?
Oder läuft es dann doch eher darauf hinaus, mehr oder weniger eine eigene "Speicherverwaltung" für Tuxtxt zu programmieren (Das dürfte allerdings ziemlich komplex werden ) ?
dbluelle
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Mit #define TUXTXT_COMPRESS 0 lässt sich der tuxtxt leider nicht kompilieren.dbluelle hat geschrieben:Evtl. wäre es mal ganz gut, die Komprimierung auszuschalten...
(Also einfach in tuxtxt_def.h das #define TUXTXT_COMPRESS auf 0 setzen)
dbluelle
Hat ein prob mit "(pg->pData)".
Habe jetzt mal mit compress 1 probiert.
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
@Nico 77
Nimm mal das
in tuxtxt_common.h, Zeile 81 raus, dann müsste es auch mit TUXTXT_COMPRESS 0 durchlaufen.
@mb405
Da war noch ein Fehler drin, der seit Samstag Nachmittag gefixt ist.
dbluelle
Nimm mal das
Code: Alles auswählen
if (pg->pData)
@mb405
Da war noch ein Fehler drin, der seit Samstag Nachmittag gefixt ist.
dbluelle
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Code: Alles auswählen
81:#else
82:// if (pg->pData)
83: memcpy(pg->data,buffer,23*40);
84:#endif
85: pthread_mutex_unlock(&tuxtxt_cache_lock);
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
Nach langer Zeit, Fehler bleibt auch mit TUXTXT_COMPRESS auf 0.dbluelle hat geschrieben:Durch eure Diskussion über den sectionsd bin ich noch auf eine Möglichkeit gekommen:
Tuxtxt arbeitet in der jetzigen Form auf der Dbox (vor allem durch die Komprimierung) viel mit malloc() und free().
Dadurch kommt es hier vielleicht auch zu einer ziemlichen Speicherfragmentierung.
Evtl. wäre es mal ganz gut, die Komprimierung auszuschalten...
(Also einfach in tuxtxt_def.h das #define TUXTXT_COMPRESS auf 0 setzen)
Falls es wirklich an der Speicherfragmentierung liegt,
gibt's da noch mehr Optimierungspotential,
aber bevor ich mich da rein kniee, wüsste ich gern, in welche "Richtung" man da gehen soll .
Also wäre es z.B. gut, die Freigabe des Cache anders zu gestalten (evtl. so in der Art eines Stacks last in-> first out) ?
Oder läuft es dann doch eher darauf hinaus, mehr oder weniger eine eigene "Speicherverwaltung" für Tuxtxt zu programmieren (Das dürfte allerdings ziemlich komplex werden ) ?
dbluelle
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
Nach langer Zeit habe ich mir den SourceCode nochmal angesehen und eine mögliche Fehlerquelle entdeckt:Der Patch verhindert, daß ein bereits geschlossener Thread nochmal geschlossen wird.
Ich weiß allerdings nicht, ob das überhaupt was ausmacht, also ist's mehr so ein Schuß ins Blaue...
(Schaden tut's aber nicht und ist auf jeden Fall sauberer)
dbluelle
Code: Alles auswählen
diff -Naur -w orig/tuxtxt_common.h ok/tuxtxt_common.h
--- orig/tuxtxt_common.h 2006-05-19 13:15:19.000000000 +0200
+++ ok/tuxtxt_common.h 2006-05-19 13:23:02.613776864 +0200
@@ -1196,6 +1196,7 @@
{
perror("TuxTxt <pthread_create>");
tuxtxt_cache.thread_starting = 0;
+ tuxtxt_cache.thread_id = 0;
return 0;
}
#if 1//DEBUG
@@ -1226,6 +1227,7 @@
perror("TuxTxt <pthread_join>");
return 0;
}
+ tuxtxt_cache.thread_id = 0;
}
if (tuxtxt_cache.dmx != -1)
{
Ich weiß allerdings nicht, ob das überhaupt was ausmacht, also ist's mehr so ein Schuß ins Blaue...
(Schaden tut's aber nicht und ist auf jeden Fall sauberer)
dbluelle
-
- Semiprofi
- Beiträge: 1383
- Registriert: Freitag 18. April 2003, 15:12
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
Okay, noch ein Versuch...
Damit wird sichergestellt, das nicht 2 Threads gleichzeitig am Cache rumfummeln.
Bei mir ist sonst auch ab und zu (1-2 mal im Monat) Enigma gecrasht, seitdem ich den Patch eingebaut habe (ca. bei Beginn der WM),
hatte ich keinen Absturz mehr...
Ich verstehe allerdings nicht, wie es überhaupt dazu kommen kann, daß (unter Enigma) zwei Threads auf den Cache zugreifen.
Naja, was solls.
dbluelle
Code: Alles auswählen
diff -Naur -w orig/libtuxtxt.c ok/libtuxtxt.c
--- orig/libtuxtxt.c 2006-07-01 15:35:41.000000000 +0200
+++ ok/libtuxtxt.c 2006-07-06 19:01:15.000000000 +0200
@@ -17,6 +17,7 @@
#include <sys/ioctl.h>
#include <fcntl.h>
+#include <pthread.h>
#include "tuxtxt_common.h"
@@ -30,12 +31,14 @@
******************************************************************************/
static int tuxtxt_initialized=0;
+static pthread_mutex_t tuxtxt_control_lock = PTHREAD_MUTEX_INITIALIZER;
int tuxtxt_init()
{
if ( tuxtxt_initialized )
return 0;
+ pthread_mutex_lock(&tuxtxt_control_lock);
tuxtxt_initialized=1;
/* init data */
@@ -48,6 +51,7 @@
tuxtxt_cache.vtxtpid = -1;
tuxtxt_cache.thread_id = 0;
tuxtxt_cache.dmx = -1;
+ pthread_mutex_unlock(&tuxtxt_control_lock);
return 1;//tuxtxt_init_demuxer();
}
@@ -57,13 +61,18 @@
int tuxtxt_stop()
{
+
if (!tuxtxt_cache.receiving) return 1;
tuxtxt_cache.receiving = 0;
- return tuxtxt_stop_thread();
+ pthread_mutex_lock(&tuxtxt_control_lock);
+ int res = tuxtxt_stop_thread();
+ pthread_mutex_unlock(&tuxtxt_control_lock);
+ return res;
}
void tuxtxt_start(int tpid)
{
+ pthread_mutex_lock(&tuxtxt_control_lock);
if (tuxtxt_cache.vtxtpid != tpid)
{
tuxtxt_stop();
@@ -76,10 +85,13 @@
{
tuxtxt_start_thread();
}
+ pthread_mutex_unlock(&tuxtxt_control_lock);
}
void tuxtxt_close()
{
+ pthread_mutex_lock(&tuxtxt_control_lock);
+
#if DEBUG
printf ("cleaning up\n");
#endif
@@ -89,6 +101,7 @@
tuxtxt_cache.dmx = -1;
tuxtxt_clear_cache();
tuxtxt_initialized=0;
+ pthread_mutex_unlock(&tuxtxt_control_lock);
}
/* Local Variables: */
Bei mir ist sonst auch ab und zu (1-2 mal im Monat) Enigma gecrasht, seitdem ich den Patch eingebaut habe (ca. bei Beginn der WM),
hatte ich keinen Absturz mehr...
Ich verstehe allerdings nicht, wie es überhaupt dazu kommen kann, daß (unter Enigma) zwei Threads auf den Cache zugreifen.
Naja, was solls.
dbluelle
-
- Developer
- Beiträge: 196
- Registriert: Dienstag 16. Oktober 2001, 00:00
-
- Contributor
- Beiträge: 319
- Registriert: Samstag 29. Mai 2004, 18:49
-
- Developer
- Beiträge: 245
- Registriert: Mittwoch 13. März 2002, 21:19
Hi,
das kann durchaus passieren, da in enigma alle "nicht enigma" plugins.. sprich alle, die nicht die enigma mainloop verwenden (also auf enigma gui/fernbedienungs funktionen zugreifen) in einem eigenen Thread gestartet werden, damit die normale enigma mainloop weiterläuft und damit z.B. noch anstehende Aufnahme/Umschalt Timer ausgeführt werden.
Aber beim normalen zappen werden ja tuxtxt funktionen aus dem enigma main thread aufgerufen.. also beim setzen der neuen vtxt pids.. start/stop.
Theoretisch wird also wenn man den Tuxtxt gerade geöffnet hat.. und enigma dann im Hintergrund für einen anstehenden Timer das Programm wechselt aus zwei threads auf die libtuxtxt zugegriffen.
Bei Neutrino dürfte es aber nicht gross anders aussehen.. da sind es statt Threads halt Daemons.. was ja auch nix anderes ist..
cu
das kann durchaus passieren, da in enigma alle "nicht enigma" plugins.. sprich alle, die nicht die enigma mainloop verwenden (also auf enigma gui/fernbedienungs funktionen zugreifen) in einem eigenen Thread gestartet werden, damit die normale enigma mainloop weiterläuft und damit z.B. noch anstehende Aufnahme/Umschalt Timer ausgeführt werden.
Aber beim normalen zappen werden ja tuxtxt funktionen aus dem enigma main thread aufgerufen.. also beim setzen der neuen vtxt pids.. start/stop.
Theoretisch wird also wenn man den Tuxtxt gerade geöffnet hat.. und enigma dann im Hintergrund für einen anstehenden Timer das Programm wechselt aus zwei threads auf die libtuxtxt zugegriffen.
Bei Neutrino dürfte es aber nicht gross anders aussehen.. da sind es statt Threads halt Daemons.. was ja auch nix anderes ist..
cu