sectionsd: Handbremse los...

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Beitrag von seife »

Ich habe die Handbremse noch ein wenig mehr gelöst, zumindest auf meiner dream 500.
Beim drüberzappen über manche Kanäle, insbesondere solche mit kaputtem / seltsamem EPG (CNN Int., Al Jazeera) dauerte es manchmal mehrere Sekunden, bis die Infobar eingeblendet wurde. Ohne laufenden sectionsd ging es schnell.
Ich habe dann rausgefunden, daß es hier manchmal mehrere Sekunden hing:

Code: Alles auswählen

src/daemonc/remotecontrol.cpp:zapTo_channelID()
581:    if ( zap_completion_timeout < now )
582:    {
583:            g_Zapit->zapTo_serviceID_NOWAIT(channel_id);
584:            g_Sectionsd->setServiceChanged( current_channel_id, false );
585:
586:            zap_completion_timeout = now + 2 * (long long) 1000000;
586:            if ( current_programm_timer != 0 )
588:           {
589:                    g_RCInput->killTimer( current_programm_timer );
590:                    current_programm_timer = 0;
591:            }
592:    }
Genauer gesagt hängt es mehrere Sekunden in Zeile 584.
Meine Lösung war, setServiceChanged() non-blocking zu machen, mit folgendem Patch:

Code: Alles auswählen

Index: daemons/sectionsd/sectionsd.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/daemons/sectionsd/sectionsd.cpp,v
retrieving revision 1.249
diff -u -p -r1.249 sectionsd.cpp
--- daemons/sectionsd/sectionsd.cpp	30 Oct 2007 08:48:23 -0000	1.249
+++ daemons/sectionsd/sectionsd.cpp	3 Nov 2007 18:03:52 -0000
@@ -2835,12 +2835,6 @@ static void commandserviceChanged(int co
 
 	showProfiling("[sectionsd] commandserviceChanged: after doWakeup");
 
-	struct sectionsd::msgResponseHeader msgResponse;
-
-	msgResponse.dataLength = 0;
-
-	writeNbytes(connfd, (const char *)&msgResponse, sizeof(msgResponse), WRITE_TIMEOUT_IN_SECONDS);
-
 	return ;
 }
 
Index: lib/sectionsdclient/sectionsdclient.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/lib/sectionsdclient/sectionsdclient.cpp,v
retrieving revision 1.55
diff -u -p -r1.55 sectionsdclient.cpp
--- lib/sectionsdclient/sectionsdclient.cpp	23 May 2007 16:43:12 -0000	1.55
+++ lib/sectionsdclient/sectionsdclient.cpp	3 Nov 2007 18:03:52 -0000
@@ -178,7 +178,6 @@ void CSectionsdClient::setServiceChanged
 
 	send(sectionsd::serviceChanged, (char *)&msg, sizeof(msg));
 
-	readResponse();
 	close_connection();
 }
 
Der eigentliche Grund liegt daran, daß sich irgendwie alles im sectionsd um den dmxEIT.lock() "staut", der Stau baut sich jedoch von selbst ab, und vor allem muß er ja nicht die GUI lahmlegen :-)

Nirvana, ist das ok oder ist das eine ganz doofe Idee?
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Supi.

Die Außenkommunikation ist nicht von mir. Die war schon immer so. Wenn es klappt - nur zu. :D
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

@seife

Ist diese Änderung mit dem was du gestern eingecheckt hast überholt ?

cu Kroki
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Beitrag von seife »

Nein. Das gestern fixt den Segfault der auftrat, wenn sectionsd lange genug nicht geantwortet hat.
Der andere Patch ändert sowohl sectionsd als auch libsectionsdclient, und die müssen dann beide gleichzeitig getauscht werden, ansonsten geht (fast) garnix mehr => das macht experimentieren mit verschiedenen sectionsd-Versionen zumindest ziemlich schwer.
Da ich noch andere Sachen am Optimieren bin (und das nur auf dreamboxen zu stören scheint), lasse ich das erstmal.
kroki
Einsteiger
Einsteiger
Beiträge: 166
Registriert: Dienstag 22. Juni 2004, 22:12

Beitrag von kroki »

Alles klar, danke ...

Kroki