sectionsd doppelte Events fixen - wie?

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Houdini »

ich auch nicht
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Nirvana »

http://ulc.tuxbox-cvs.sourceforge.net/i ... tory=Diffs&

Absolut ungetestet, weil ich keine Box greifbar habe und auch keine Zeit.
Wahrscheinlich stürzt es ab oder macht gar nix, aber ihr könnt es ja mal testen. Ich bin dann im Urlaub. :)
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Nirvana hat geschrieben:Wahrscheinlich stürzt es ab oder macht gar nix, aber ihr könnt es ja mal testen.
Abstürzen tut's bis jetzt nicht, und machen tut es insofern etwas, als dass der sectionsd schon mal wie gewohnt funktioniert. Hab also beim Starten & Antesten keine Probleme festgestellt.
Mal schauen, ob's gegen die Multievents hilft. :D
Nirvana hat geschrieben:Ich bin dann im Urlaub. :)
Na, Du hast's gut. Und wenn der Patch hilft, hast Du's auch doppelt verdient. :lol:

Danke schon einmal für den Patch!
"Mal eben gestrickt" und "ungetestet"... Compiled & läuft trotzdem. Respekt! Schade nur, dass Du so wenig Zeit hast. Aber wer kennt das nicht?
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Zum Testen hier das Binary: sectionsd1260.zip
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Okay, gegen doppelte Events hilft der Patch nicht. Hab gerade welche drin... :cry:
PauleFoul
Wissender
Wissender
Beiträge: 1839
Registriert: Sonntag 17. August 2003, 01:39

Re: sectionsd doppelte Events fixen - wie?

Beitrag von PauleFoul »

Also bei mir sieht es im Moment gut aus. Auch werden die Events schneller eingelesen finde ich...


Gruß
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Ich habs mir auch mal auf die Box kopiert. Mal sehen ...

Auch habe ich mir mal den Quelltext angesehen. Der ist eigentlich recht gut nachvollziehbar. Allerdings wundert mich eine Stelle:

Code: Alles auswählen

static bool deleteEventsFromTableSection(const t_channel_id serviceUniqueKey, const unsigned char table_id, const unsigned char section_number)
{
	...
	if (!table_id) 
	{
		...
	}
	...
}
Warum wird hier auf "not table_id" getestet? So wie es jetzt ist, ist es meiner Meinung nach kein Wunder, dass es nicht funktioniert. Der Teil, in dem die Events gelöscht werden, wird doch so nie ausgeführt. Oder sehe ich das falsch?
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Nirvana »

Genau, das sollte wohl if (table_id) sein...
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Na, schon wieder zurück aus dem Urlaub? War wohl nicht so doll ... :D
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Okay, auf ein Neues. Hier das gefixte Binary: sectionsd1260_fixed.zip
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Kleine Zwischeninfo: Bei mir werden gerade auf einigen Sendern die aktuellen Sendungen (Start: 20:15) nicht angezeigt. (BR/BR alpha/SWR/WDR)
Im Log steht, sobald ich die EPG-Vorschau(rot/rot) aufrufe:

Code: Alles auswählen

no response from sectionsd
Ein Neustart vom sectionsd behebt das Problem, danach sind die Sendungen da.

Dass die Events schneller eingelesen werden, kann ich nicht wirklich bestätigen. Gleiche Geschwindigkeit wie ohne Patch, würde ich sagen.
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Jetzt ist der sectionsd mit folgender Meldung abgestürzt:

Code: Alles auswählen

sectionsd: /home/m/tuxbox_2x/dbox2/cdk/lib/gcc/powerpc-tuxbox-linux-gnu/3.4.6/../../../../powerpc-tuxbox-linux-gnu/include/boost/shared_ptr.hpp:315: T* boost::shared_ptr<T>::operator->() const [with T = SIevent]: Assertion `px != 0' failed.
So 'ne Meldung habe ich auf der Box noch nie gesehen. Da sind ja Build-Pfade in der Meldung... :gruebel:
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Nirvana »

Tja, das erste hat mit den Änderungen nix zu tun. Das zweite schon. ;)

Aus den Listen zu löschen und dann wieder draufzuzugreifen kommt scheinbar nicht so gut...
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Vielleicht sollte man das Löschen ja nach demselben Prinzip wie in der Funktion "removeOldEvents" machen. Das funktioniert ja.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

So, mein Vorschlag für die Funktion "deleteEventsFromTableSection" sieht folgendermaßen aus:

Code: Alles auswählen

static bool deleteEventsFromTableSection(const t_channel_id serviceUniqueKey, const unsigned char table_id, const unsigned char section_number)
{
	bool event_deleted = false;
	bool serviceIDfound = false;

	readLockEvents();

	MySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey::iterator e = mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.begin();

	while (e != mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.end()) {
		if ((*e)->get_channel_id() == serviceUniqueKey) {
			serviceIDfound = true;
			if (((*e)->table_id == table_id) && ((*e)->section_number == section_number)) {
				unlockEvents();
				deleteEvent((*(e++))->uniqueKey());
				readLockEvents();
				event_deleted = true;
			}
			else
				++e;
		}
		else if (serviceIDfound)
			break; // sind nach serviceID und startzeit sortiert -> nicht weiter suchen
	}	
	unlockEvents();

	return event_deleted;
}
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Ich hab Deinen Vorschlag mal eingebaut und lass es jetzt mal einfach laufen. :)
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Schön. Mal sehen, ob's was bringt. Getestet habe ich es aber selbst nicht.
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Okay, der friert fest. Events kommen nicht rein und beim Umschalten bleibt Neutrino fast komplett stehen. sectionsd killen "befreit" Neutrino dann wieder.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Mist. Dabei hab ich das doch fast so wie in "removeOldEvents" gemacht. :gruebel:
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

So vielleicht?

Code: Alles auswählen

static bool deleteEventsFromTableSection(const t_channel_id serviceUniqueKey, const unsigned char table_id, const unsigned char section_number)
{
	bool event_deleted = false;
	bool serviceIDfound = false;

	readLockEvents();

	MySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey::iterator e = mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.begin();

	while (e != mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.end()) {
		unlockEvents();
		if ((*e)->get_channel_id() == serviceUniqueKey) {
			serviceIDfound = true;
			if (((*e)->table_id == table_id) && ((*e)->section_number == section_number)) {
				deleteEvent((*(e++))->uniqueKey());
				event_deleted = true;
			}
			else
				++e;
		}
		else if (serviceIDfound) {
			readLockEvents();
			break; // sind nach serviceID und startzeit sortiert -> nicht weiter suchen
		}
		readLockEvents();
	}	
	unlockEvents();

	return event_deleted;
}
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Freezed zwar nicht, bringt aber keine Events ("Warte auf EPG-Informationen...").
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Ich geb's auf. Ich hab wohl doch nicht genug Ahnung vom sectionsd, um darin rumzupfuschen. :(
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Trotzdem danke, dass Du's versucht hast. :)

Evtl. hat Nirvana ja noch 'nen Geistesblitz... Oder ist er jetzt wirklich im Urlaub? :gruebel:
ingrid
Erleuchteter
Erleuchteter
Beiträge: 600
Registriert: Samstag 14. Oktober 2006, 10:53

Re: sectionsd doppelte Events fixen - wie?

Beitrag von ingrid »

Das hier scheint zu funktionieren, jedenfalls freezed nüscht und Events kommen rein. Ob's stabil läuft und gegen Multi-Events hilft? Schaun 'mer mal...
DIFF: sectionsd1260_fixed_2.diff
Binary: sectionsd1260_fixed_2.zip

Gaucho's Tip mit dem Schielen auf die removeOldEvents war nicht schlecht. Meine Modifikationen sollte sich aber unbedingt noch einmal ein sectionsd-Versteher anschauen, ob das alles in der richtigen Reihenfolge gelocked wird bzw. wieder sauber "unlocked" wird, so wie's sectionsd & Neutrino haben wollen... Mein Code ist momentan eher intuitiv als dass ich den sectionsd wirklich verstehe. Laufen tut's jedenfalls erstmal...

Falls der Code funktioniert, war's gutes Teamwork. :lol:

Reports, please! :gruebel:
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Re: sectionsd doppelte Events fixen - wie?

Beitrag von Gaucho316 »

Ich habe wohl einfach zu viel von dem Code aus "removeOldEvents" für unwichtig befunden. Schön, dass du noch eine funktionierende Version hinbekommen hast. Ich werde mir diesen sectionsd auch mal auf die Box packen und ihn beobachten.