Wenn ich unter Linux ein Library lade.

Gast #2926840
Lesenswert?

Hallo zusammen..

Wenn ich unter Linux in einem eigenen Programm ein Library (.so) lade 
(dlopen), in welchem Speicher allokiert wird, und ich dieses ohne den 
Speicher wieder freizugeben wiedler entlade (dlclose)...

Stürzt dann mein Programm ab, oder bleibt "lediglich" ein Speicherleck, 
oder bleibt gar kein Speicherleck??


Ich verwende einen fremden Protokollstack, in welchem Speicher allokiert 
wird und welcher in einem Fehlerfall (wenn der Fehler vom Stack nicht 
mehr behoben werden kann) eine RaiseException Funktion aufruft, in 
welcher ein abort() ausgeführt wird - das Programm beeendet sich..

Da ich aber auf keinen Fall will dass mein Programm mit in den Tod 
gerissen wird, würde ich dieses abort() entfernen und stattdessen meinem 
Programm mitteilen dass es das .so entladen soll.

Wie kann man sowas ansosten vernünftig lösen?

Vielen Dank,
Mike
Gast #2926865
Lesenswert?

LibraryNewbie schrieb:
> Wenn ich unter Linux in einem eigenen Programm ein Library (.so) lade
> (dlopen), in welchem Speicher allokiert wird, und ich dieses ohne den
> Speicher wieder freizugeben wiedler entlade (dlclose)...
>
> Stürzt dann mein Programm ab, oder bleibt "lediglich" ein Speicherleck,
> oder bleibt gar kein Speicherleck??

Der Speicher bleibt reserviert.

> Ich verwende einen fremden Protokollstack, in welchem Speicher allokiert
> wird und welcher in einem Fehlerfall (wenn der Fehler vom Stack nicht
> mehr behoben werden kann) eine RaiseException Funktion aufruft, in
> welcher ein abort() ausgeführt wird - das Programm beeendet sich..
>
> Da ich aber auf keinen Fall will dass mein Programm mit in den Tod
> gerissen wird, würde ich dieses abort() entfernen und stattdessen meinem
> Programm mitteilen dass es das .so entladen soll.

Was willst du mit dem entladen der Library erreichen ?
Gast #2926880
Lesenswert?

Hi ergen,

vielen Dank!

Nun ja, ich könnte dem Anwender z.B. mitteilen dass es was mit dem Stack 
hat.. Kommt auf alle fälle besser als ein "Aborted" in der Shell..

Evtl. kann ich auch versuchen das Library neu zu laden... Da die 
Exception nicht alle paar Stunden auftreten sollte, können auch gerne 
mal ein paar kB unbenutzt stehen bleiben...

Das kommt dann auch darauf an (meine nächste Frage), ob die vom Library 
statischen Variablen beim Laden dann wieder neu initialisiert werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren