sectionsd: funktioniert EIT update bei jemandem?
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Ja, und wenn die Bahn mich heimfährt, dann probier ich es am Wochenende auch nochmal :-) Auf Kinowelt TV, Premiere 4, hatte ich nie gezappt, da das schwarze Bild nicht sooo interessant ist, aber wenn ich weiß, daß das Probleme macht, kann ichs ja mal probieren :-) Allerdings ist er ja einmal auch auf ZDFinfokanal abgesemmelt... Seltsam.
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
auch auf zdf infokanal passiert das
ich hab mal dutzende debugs eingebaut
nur gut . das ich net weis was das alles bedeutet
ich seh, das weit unten ein if ... auskommentiert ist
ich hab mal dutzende debugs eingebaut
der code sieht so aus dort ab zeile 688-739...
[eitThread] skipping to next filter(6) (> DMX_TIMEOUT_SKIPPING)
dmx.cpp:change:677
dmx.cpp:change:680
dmx.cpp:change:682
dmx.cpp:change:685
dmx.cpp:change:707
changeDMX [12]-> 6 (0x4e/0xff) actual transport stream, now/next (collect EIT version)
dmx.cpp:change:719
dmx.cpp:change:721
dmx.cpp:change:726
dmx.cpp:change:739
dmx.cpp:change:752
dmx.cpp:change:754
dmx.cpp:change:758
dmx.cpp:change:760
dmx.cpp:change:677
dmx.cpp:change:680
dmx.cpp:change:682
dmx.cpp:change:685
dmx.cpp:change:707
Segmentation fault
Code: Alles auswählen
#ifdef PAUSE_EQUALS_STOP
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
pthread_cond_signal(&change_cond);
#endif
unlock();
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
return 1;
}
if (real_pauseCounter > 0)
{
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
dprintf("changeDMX: for 0x%x ignored! because of real_pauseCounter> 0\n", filters[new_filter_index].filter);
unlock();
return 0; // laeuft nicht (zB streaming)
}
// if(pID==0x12) // Nur bei EIT
//int _debug=debug; debug=1;
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
dprintf("changeDMX [%x]-> %d (0x%x/0x%x)%s\n",pID,new_filter_index,filters[new_filter_index].filter,filters[new_filter_index].mask,dmx_filter_types[new_filter_index]);
//debug=_debug;
/* if (ioctl(fd, DMX_STOP, 0) == -1)
{
closefd();
perror("[sectionsd] DMX: DMX_STOP");
pthread_mutex_unlock(&start_stop_mutex);
return 2;
}
*/
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
closefd();
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
// if (new_filter_index != filter_index)
{
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
/* filter_index = new_filter_index; */
int rc = immediate_start();
if (rc != 0)
{
unlock();
return rc;
}
showProfiling("after DMX_SET_FILTER");
}
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
ich seh, das weit unten ein if ... auskommentiert ist
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Super. Moment.
Edit:
Ich vermute, daß der filter_index irgendwie aus dem Ruder läuft.
Bau bitte mal das in dmx.cpp ein, ca. Zeile 661:
Dann müßte diese Meldung in den Fällen kommen, wo er früher abgeschmiert ist (und evtl. irgendwas ganz schreckliches passieren :-). Warum es überhaupt dazu kommen kann ist mir immer noch unklar, ist evtl. ein threading / locking-Problem. Dummerweise genau das, womit ich mich nicht wirklich auskenne :-)
Edit:
Ich vermute, daß der filter_index irgendwie aus dem Ruder läuft.
Bau bitte mal das in dmx.cpp ein, ca. Zeile 661:
Code: Alles auswählen
int DMX::change(const int new_filter_index)
{
if (new_filter_index > filters.size() -1) {
fprintf(stderr, "ERROR changeDMX: filter_index out of range! index: %d, max: %d\n", new_filter_index, filters.size()-1);
return 1;
}
showProfiling("changeDMX: before pthread_mutex_lock(&start_stop_mutex)");
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
irgendwie haste recht
mit dem hack gehts jetzt ohne segfault.dmx.read timeout - filter: 61 - timeout# 0
sectionsd.cpp:eitThread:6926
sectionsd.cpp:eitThread:6930
sectionsd.cpp:eitThread:6924
dmx.read timeout - filter: 61 - timeout# 1
sectionsd.cpp:eitThread:6926
sectionsd.cpp:eitThread:6930
sectionsd.cpp:eitThread:6924
dmx.read timeout - filter: 61 - timeout# 2
sectionsd.cpp:eitThread:6926
sectionsd.cpp:eitThread:6930
sectionsd.cpp:eitThread:6924
dmx.read timeout - filter: 61 - timeout# 3
sectionsd.cpp:eitThread:6926
sectionsd.cpp:eitThread:6930
[eitThread] skipping to next filter(6) (> DMX_TIMEOUT_SKIPPING)
dmx.cpp:change:682
dmx.cpp:change:685
dmx.cpp:change:687
dmx.cpp:change:690
dmx.cpp:change:712
changeDMX [12]-> 6 (0x4e/0xff)actual transport stream, now/next (collect EIT version)
dmx.cpp:change:724
dmx.cpp:change:726
dmx.cpp:change:731
dmx.cpp:change:744
dmx.cpp:change:757
dmx.cpp:change:759
dmx.cpp:change:763
dmx.cpp:change:765
ERROR changeDMX: filter_index out of range! index: 7, max: 6
sectionsd.cpp:eitThread:6924
dmx.cpp:getSection:285
dmx.cpp:getSection:288
dmx.cpp:getSection:300
dmx.cpp:getSection:323
dmx.cpp:getSection:336
dmx.cpp:getSection:339
dmx.cpp:getSection:347
dmx.cpp:getSection:352
old_version: 255 new version: 10
eit_version 10
dmx.cpp:getSection:380
dmx.cpp:getSection:386
sectionsd.cpp:eitThread:6926
sectionsd.cpp:eitThread:6930
dmxEIT: going to sleep...
eit_set_update_filter, servicekey = 0x110085000e, current version 10
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Ich kann mir das nicht wirklich erklären, es sei denn, dmxEIT.filter_index müßte auch durch einen lock "beschützt" werden.
Man müßte nun rausfinden, welcher der "dmxEIT.change()" bzw. der dmxEIT_next_filter()-Aufrufe das triggert. Also alle debug-printf's wieder raus (die mit __FUNCTION__,__LINE__,...) und stattdessen vor jedem dmxEIT.change() bzw. dmxEIT_next_filter() jeweils einen reinmachen... Dann sehen wir, wo es triggert. Allerdings sind alle dmxEIT_next_filter hinter if-Abfragen, ob der Wert noch im grünen Bereich ist, ich kann mir also nicht vorstellen, woran es liegt.
Das ist ganz schön anstrengend, was? :-)
Man müßte nun rausfinden, welcher der "dmxEIT.change()" bzw. der dmxEIT_next_filter()-Aufrufe das triggert. Also alle debug-printf's wieder raus (die mit __FUNCTION__,__LINE__,...) und stattdessen vor jedem dmxEIT.change() bzw. dmxEIT_next_filter() jeweils einen reinmachen... Dann sehen wir, wo es triggert. Allerdings sind alle dmxEIT_next_filter hinter if-Abfragen, ob der Wert noch im grünen Bereich ist, ich kann mir also nicht vorstellen, woran es liegt.
Das ist ganz schön anstrengend, was? :-)
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Eigentlich nicht mehr, die sollten mit meinem patch fast alle (bis auf 1) auskommentiert sein, und ein "dmxEIT_next_filter()" darunter haben (ohne Kommentarzeichen)
edit:
Sind genau 2, einer in dmxEIT_next_filter und einer ca. in Zeile 6767, der aber auch nur bei index=0, index=2, index=1 oder index=3 aufgerufen werden dürfte.
Ich vermute immer mehr, daß wir einen lock um Zugriffe auf filter_index brauchen :-(
edit:
Code: Alles auswählen
seife@susi> grep "dmxEIT\.change.*\+1" sectionsd.cpp
dmxEIT.change(dmxEIT.filter_index + 1);
// dmxEIT.change(dmxEIT.filter_index + 1);
dmxEIT.change( dmxEIT.filter_index + 1 );
// dmxEIT.change(dmxEIT.filter_index + 1);
// dmxEIT.change(dmxEIT.filter_index + 1);
// dmxEIT.change(dmxEIT.filter_index + 1);
Ich vermute immer mehr, daß wir einen lock um Zugriffe auf filter_index brauchen :-(
Zuletzt geändert von seife am Mittwoch 14. November 2007, 17:50, insgesamt 1-mal geändert.
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
so habs
edit
ich bin ein dödel
ich hatte noch 2x dmxEIT.change(dmxEIT.filter_index + 1); nicht ausgeklammert drin.
nächster test kommt gleich.
und der code drumrum sieht so auschangeDMX [12]-> 5 (0x61/0xf1)other transport stream, scheduled 2/2
dmx.read timeout - filter: 61 - timeout# 0
dmx.read timeout - filter: 61 - timeout# 1
dmx.read timeout - filter: 61 - timeout# 2
dmx.read timeout - filter: 61 - timeout# 3
[eitThread] skipping to next filter(6) (> DMX_TIMEOUT_SKIPPING)
sectionsd.cpp:eitThread:6823
changeDMX [12]-> 6 (0x4e/0xff)actual transport stream, now/next (collect EIT version)
sectionsd.cpp:eitThread:6825
sectionsd.cpp:dmxEIT_next_filter:6649
ERROR changeDMX: filter_index out of range! index: 7, max: 6
waiting for eit_version...
old_version: 255 new version: 26
eit_version 26
dmxEIT: going to sleep...
eit_set_update_filter, servicekey = 0x110085000e, current version 26
Code: Alles auswählen
/* the last filter is for retrieving the current EIT version number, so
+ we need to set the current service to let dmxEIT.getSection achieve that */
void dmxEIT_next_filter(void)
{
if (dmxEIT.filter_index + 1 == (signed)dmxEIT.filters.size() - 1)
{
readLockMessaging();
dmxEIT.setCurrentService(messaging_current_servicekey & 0xffff);
unlockMessaging();
}
fprintf(stderr,"%s:%s:%d\n",__FILE__,__FUNCTION__,__LINE__);
dmxEIT.change(dmxEIT.filter_index + 1);
}
ich bin ein dödel
ich hatte noch 2x dmxEIT.change(dmxEIT.filter_index + 1); nicht ausgeklammert drin.
nächster test kommt gleich.
Zuletzt geändert von mb405 am Mittwoch 14. November 2007, 17:55, insgesamt 1-mal geändert.
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
-
- Tuxboxer
- Beiträge: 2331
- Registriert: Donnerstag 24. März 2005, 21:52
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Der alte diff hat wunderbar funktioniert, mb405 hat's selbst verbockt. :-)
Aber ich habe ihn mal ein wenig aufgehübscht, allerdings nur compile-getestet.
sectionsd-1249-fix_eitupdate-try3.diff
Aber ich habe ihn mal ein wenig aufgehübscht, allerdings nur compile-getestet.
sectionsd-1249-fix_eitupdate-try3.diff
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36