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: }
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();
}
Nirvana, ist das ok oder ist das eine ganz doofe Idee?