Programmier-, Qt- oder Xorg-Fehler?

Verschiedenes zu Qt
Antworten
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Programmier-, Qt- oder Xorg-Fehler?

Beitrag von Tilman Räger »

Hallo,
Wir haben hier ein kleines Problem, für das wir zwar inzwishcen einen Workaround haben, wo uns aber doch interessiert, wo genau der Fehler liegen könnte:

Eine Anwendung, die nichts anderes macht, als immer wieder neue Widgets auf und wieder abzubauen, führt dazu, daß der Speicherverbrauch der Anwendung und - im gleichen Maß - des Prozesses Xorg (ich nehme mal an, der XServer) kontinuierlich ansteigt, also ein typisches memory leak.
Durch kontinuierlich Reduktion des Codes konnten wir nachweisen, daß das Memory leak nur dann auftritt, wenn in der Routine onPaintEvent() das
lokale QPainter-Objekt via

Code: Alles auswählen

QPainter painter(this);
erzeugt wird, also der in der Dokumentation allgemein vorgeschlagene Weg. Erzeugt man das Objekt mit dem Standard-Konstruktor und verwendet die Funktionen begin() und end(), so tritt kein Memory Leak auf, d.h. Wenn die funktion onPaintEvent wie folgt aufgebaut ist:

Code: Alles auswählen

{
    QPainter painter;

    painter.begin(this);

    // Zeichenfunktionen 

    painter.end();
}
Interessanterweise tritt das Memory-Leak nur auf unserem Zielsystem, einem Display mit einem abgespeckten GNU Linux, auf dem PC (Kubuntu 6.06) tritt das Problem nicht auf. Qt-Version ist Qt 4.1.4.

Kennt jemand das Problem oder kann mir einen Tip geben, wo das Problem liegen könnte?

Gruß
Tilman Räger[/code]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das hört sich recht kommerziell an - schonmal tt-support gefragt. Ggf. auch mal mit neuerer Version ausprobiert? Mir ist sowas nicht bekannt - zumal der dtor auch end() aufruft wie man in den Sourcen sieht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Beitrag von Tilman Räger »

Hallo,

Ja, es ist kommerziell. Anfrage bei Trolltech sollte eigentlich auch laufen. Allerdings habe ich beim Hersteller immer die Befürchtung, daß der Probleme erst einmal als PAL (Problem Anderer Leute) definiert, als erst einmal sagt, es habe nichts mit ihm zu tun. Was ja in diesem Fall auch sein kann.

Sinn meiner Frage hier war eigentlich, ob jemand so ein Verhalten schon einmal gesehen hat und/oder ob jemand mir einen Tip geben könnte, wo der Fehler liegt, wie gesagt - QT, XOrg oder eigener Fehler, ich schließe nichts aus!

Gruß
Tilman (Räger)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie gesagt - schau Dir die Sourcen von QPainter::~QPainter und QPainter::end() an - der dtor müsste nicht viel weiter machen als end() aufzurufen. Deshalb wundert mich das ein wenig.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten