Hi zusammen,
folgender (wohl Standard-) Code ist im Einsatz:
self.picload = ePicLoad()
self.picload_conn=self.picload.PictureData.connect(self.finish_decode)
Wenn ich mit ePicLoad.startDecode(picName) ein Bild lade, wird dann auch self.finish_decode aufgerufen, wie es sich gehört.
Ist das Bild allerdings korrupt, wird finish_decode (natürlich) nicht aufgerufen. Und: Wenn ich dasselbe korrupte Bild oft hintereinander mit StartDecode() aufrufe, schmiert die Kiste irgendwann komplett ab, oft sogar so, dass ich nichtmal mehr mit telnet draufkomme - nur noch Netzschalter.
Weils manchmal einen crashlog gibt, in dem dann sowas steht wie
Failed to allocate accel surface 1920x1080 8294400 bytes
....
295173316 accel bytes used
useless try to flush a non accel surface with size 1920X1080 and addr 0x85edf008
ION_IOC_ALLOC: Cannot allocate memory
[Picon Renderer] Sorry, i give up! (2 times)
vermute ich mit meinem begrenzten Halbwissen, dass der wiederholte Aufruf von StartDecode() mit dem korrupten Bild jedesmal Speicher belegt, der dann nicht mehr freigegeben wird.
Mit journalctrl sehe ich
[ePicLoad] failed to load pixmap: /media/usb/corruptpic.jpg
Dez 02 09:10:04 dm920 enigma2[308]: Corrupt JPEG data: premature end of data segment
Dez 02 09:10:04 dm920 enigma2[308]: before: 1
Dez 02 09:10:04 dm920 enigma2[308]: Invalid JPEG file structure: two SOF markers
Meine Fragen an die Spezialisten:
- Liege ich mit meinen Vermutungen überhaupt richtig?
- Wie kann ich das im Code abfangen? Gibt es irgeneine Möglichkeit, im Code das auch rauszukriegen, was mir das journalctrl anzeigt?
- Falls meine Vermutung mit dem nicht freigegebene Speicher richtig ist: Wie kann ich den wieder freigeben?
Danke und Grüsse
Alfred