[PATCH] CCam()-Class fd leak wenn zapit in standby geht
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
[PATCH] CCam()-Class fd leak wenn zapit in standby geht
0001-close-the-socket-fd-when-deleting-CCam-objects.patch
Wenn man zapit in standby schickt und wieder aufweckt (movieplayer oder "pzapit -esb; pzapit -lsb"), dann leaked es einen socked Filedescriptor. Der geht verloren, weil das CCam()-Objekt nicht hinter sich aufräumt.
Dieser relativ triviale Patch fixed das für mich, aber da ich kein C++-Spezi bin (das "virtual" vor dem Destruktor habe ich wegen der Compilerwarnings hingeschrieben... ) wäre es vermutlich gut, wenn sich das noch jemand kurz anschaut.
Alternativ könnte man auch in CCam::sendMessage() den fd sofort wieder schliessen, denke ich.
Wenn man zapit in standby schickt und wieder aufweckt (movieplayer oder "pzapit -esb; pzapit -lsb"), dann leaked es einen socked Filedescriptor. Der geht verloren, weil das CCam()-Objekt nicht hinter sich aufräumt.
Dieser relativ triviale Patch fixed das für mich, aber da ich kein C++-Spezi bin (das "virtual" vor dem Destruktor habe ich wegen der Compilerwarnings hingeschrieben... ) wäre es vermutlich gut, wenn sich das noch jemand kurz anschaut.
Alternativ könnte man auch in CCam::sendMessage() den fd sofort wieder schliessen, denke ich.
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Könntest du das bitte etwas genauer erklären? Ich konnte hier nie ein Problem feststellen. Wie kann ich das nachstellen, bzw. was genau passiert da? ^^seife hat geschrieben:Wenn man zapit in standby schickt und wieder aufweckt (movieplayer oder "pzapit -esb; pzapit -lsb"), dann leaked es einen socked Filedescriptor. Der geht verloren, weil das CCam()-Objekt nicht hinter sich aufräumt.
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Code: Alles auswählen
/var $ pidof zapit
174
/var $ ls -l /proc/174/fd |grep socket
lrwx------ 1 root root 64 Feb 22 16:00 13 -> socket:[1755]
lrwx------ 1 root root 64 Feb 22 16:00 4 -> socket:[251]
/var $ pzapit -esb; pzapit -lsb
/var $ ls -l /proc/174/fd |grep socket
lrwx------ 1 root root 64 Feb 22 16:01 13 -> socket:[1755]
lrwx------ 1 root root 64 Feb 22 16:01 14 -> socket:[2285]
lrwx------ 1 root root 64 Feb 22 16:01 4 -> socket:[251]
/var $ pzapit -esb; pzapit -lsb
/var $ ls -l /proc/174/fd |grep socket
lrwx------ 1 root root 64 Feb 22 16:01 13 -> socket:[1755]
lrwx------ 1 root root 64 Feb 22 16:01 14 -> socket:[2285]
lrwx------ 1 root root 64 Feb 22 16:01 15 -> socket:[2441]
lrwx------ 1 root root 64 Feb 22 16:01 4 -> socket:[251]
/var $
-
- Erleuchteter
- Beiträge: 625
- Registriert: Samstag 8. September 2007, 16:17
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
:dash:
So, nu habs auch ich kapiert. Werds mal einbauen und testen.
So, nu habs auch ich kapiert. Werds mal einbauen und testen.
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Die Frage ist, ob das korrekt ist. Es funktioniert, das steht ausser Frage
-
- Contributor
- Beiträge: 1509
- Registriert: Donnerstag 27. Dezember 2007, 12:59
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Ich kann das hier nicht nachvollziehen. Gibts da eventuell noch eine Besonderheit? Sprich: nur bei Sat?
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Eigentlich nicht. Evtl. tritt es nur auf, wenn man auch tatsächlich irgendeinen camd laufen hat (ich habe normalerweise nicht mal den camd2, weil ich kein Premiere habe). Wenn die Verbindung zum Camd gleich fehlschlägt, dann lungert vermutlich später auch kein socket-FD rum.
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Ich kann seifes Beobachtungen und die Funktionsfähigkeit von seifes Patch bestätigen:
CVS-Code:
Gepatcht:
CVS-Code:
Code: Alles auswählen
/var # ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:21 13 -> socket:[25178]
lrwx------ 1 root root 64 Feb 28 20:21 4 -> socket:[309]
/var # pzapit -esb; pzapit -lsb
/var # ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:21 13 -> socket:[25178]
lrwx------ 1 root root 64 Feb 28 20:21 15 -> socket:[25882]
lrwx------ 1 root root 64 Feb 28 20:21 4 -> socket:[309]
/var # pzapit -esb; pzapit -lsb
/var # ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:21 13 -> socket:[25178]
lrwx------ 1 root root 64 Feb 28 20:21 15 -> socket:[25882]
lrwx------ 1 root root 64 Feb 28 20:21 16 -> socket:[26211]
lrwx------ 1 root root 64 Feb 28 20:21 4 -> socket:[309]
/var # pzapit -esb; pzapit -lsb
/var # ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:22 13 -> socket:[25178]
lrwx------ 1 root root 64 Feb 28 20:22 15 -> socket:[25882]
lrwx------ 1 root root 64 Feb 28 20:22 16 -> socket:[26211]
lrwx------ 1 root root 64 Feb 28 20:22 17 -> socket:[26547]
lrwx------ 1 root root 64 Feb 28 20:22 4 -> socket:[309]
#
Code: Alles auswählen
# ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:29 13 -> socket:[745]
lrwx------ 1 root root 64 Feb 28 20:29 4 -> socket:[238]
# pzapit -esb; pzapit -lsb
# ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:29 12 -> socket:[1122]
lrwx------ 1 root root 64 Feb 28 20:29 4 -> socket:[238]
# pzapit -esb; pzapit -lsb
# ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:29 12 -> socket:[1460]
lrwx------ 1 root root 64 Feb 28 20:29 4 -> socket:[238]
# pzapit -esb; pzapit -lsb
# ls -l /proc/`pidof zapit`/fd |grep socket
lrwx------ 1 root root 64 Feb 28 20:30 12 -> socket:[1798]
lrwx------ 1 root root 64 Feb 28 20:30 4 -> socket:[238]
#
-
- Contributor
- Beiträge: 1509
- Registriert: Donnerstag 27. Dezember 2007, 12:59
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Stimmt, mit aktiver camd2 kann ich jetzt auch nachvollziehen. Ohne bleibts unverändert.seife hat geschrieben:Evtl. tritt es nur auf, wenn man auch tatsächlich irgendeinen camd laufen hat
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
@seife: Auf der dunklen Seite ist dieser Code, der für ein anderes
Thema geschrieben wurde, irgendwann mal aufgetaucht:
Wahrscheinlich muss der Code von Hand eingebaut werden, da ich
ihn aus einem größeren Code-Fragment ausgeschnitten habe.
Ob der Code den C++-Standards nun besser entspricht, kann ich
leider mangels Kenntnissen nicht beurteilen. Ich poste ihn nur als
Diskussionsgrundlage, Quell-URL gibt es nur gegen PM, allerdings
nur, sofern das nicht gegen die Boardregeln verstösst.
Thema geschrieben wurde, irgendwann mal aufgetaucht:
Code: Alles auswählen
--- a/apps/dvb/zapit/include/zapit/cam.h 9 Feb 2003 19:22:08 -0000 1.25
+++ b/apps/dvb/zapit/include/zapit/cam.h 2 Jun 2008 15:27:18 -0000
@@ -35,6 +35,8 @@ class CCam : public CBasicClient
public:
bool setCaPmt(CCaPmt * const caPmt);
+ unsigned int number;
+ CCam(int Number);
};
#endif /* __cam_h__ */
--- a/apps/dvb/zapit/src/zapci/cam.cpp 4 Apr 2004 20:20:45 -0000 1.33
+++ b/apps/dvb/zapit/src/zapci/cam.cpp 2 Jun 2008 15:27:23 -0000
@@ -31,9 +31,21 @@ const unsigned char CCam::getVersion(voi
return 0x9F;
}
+CCam::CCam(int Number)
+{
+ number = Number;
+}
+
const char *CCam::getSocketName(void) const
{
ihn aus einem größeren Code-Fragment ausgeschnitten habe.
Ob der Code den C++-Standards nun besser entspricht, kann ich
leider mangels Kenntnissen nicht beurteilen. Ich poste ihn nur als
Diskussionsgrundlage, Quell-URL gibt es nur gegen PM, allerdings
nur, sofern das nicht gegen die Boardregeln verstösst.
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Dieser Code macht was anderes.
Das Problem ist, dass es keinen Destruktor gibt, der den fd wieser schliesst.
Was du suchen musst ist nicht eine Funktion
CCam::CCam() => das ist der Konstruktor, sondern
CCam::~CCam(), weil die ist der Destruktor. Wenn es den dort nicht gibt, dann hat dieser code dasselbe Problem.
Ansonsten ist das nun wahrlich kein Geheimnis, was der Rest dieses Codefragments macht, und mehrere camds anzusteuern ist ja wirklich trivial Und dafür hat es halt der default-Konstruktor nicht getan, deswegen wurde da ein eigener gemacht.
Wie gesagt: Ich weiss, dass mein Destruktor funktioniert, allerdings bin ich mir nicht sicher wegen dem ganzen "virtual"-Gedöns etc.
Egal, ich frag nächste Woche mal nen Kollegen, der sich "etwas" besser als ich in C++ auskennt.
Das Problem ist, dass es keinen Destruktor gibt, der den fd wieser schliesst.
Was du suchen musst ist nicht eine Funktion
CCam::CCam() => das ist der Konstruktor, sondern
CCam::~CCam(), weil die ist der Destruktor. Wenn es den dort nicht gibt, dann hat dieser code dasselbe Problem.
Ansonsten ist das nun wahrlich kein Geheimnis, was der Rest dieses Codefragments macht, und mehrere camds anzusteuern ist ja wirklich trivial Und dafür hat es halt der default-Konstruktor nicht getan, deswegen wurde da ein eigener gemacht.
Wie gesagt: Ich weiss, dass mein Destruktor funktioniert, allerdings bin ich mir nicht sicher wegen dem ganzen "virtual"-Gedöns etc.
Egal, ich frag nächste Woche mal nen Kollegen, der sich "etwas" besser als ich in C++ auskennt.
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Danke, wieder was gelerntseife hat geschrieben:CCam::CCam() => das ist der Konstruktor, sondern
CCam::~CCam(), weil die ist der Destruktor.
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Dieser Patch ist Bestandteil des control_zapit_merge-Branches,
wenn er keine Schwierigkeiten gemacht hat, checke ich ihn ein.
wenn er keine Schwierigkeiten gemacht hat, checke ich ihn ein.
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
Ich habe bisher keine negativen Nebenwirkungen bemerkt.
-
- Contributor
- Beiträge: 1509
- Registriert: Donnerstag 27. Dezember 2007, 12:59
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: [PATCH] CCam()-Class fd leak wenn zapit in standby geht
committed to CVS