Forum: PC-Programmierung Wenn ich unter Linux ein Library lade.


von LibraryNewbie (Gast)


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

: Verschoben durch User
von ergen (Gast)


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 ?

von Alexander S. (alexander_s45)


Lesenswert?

Probier mal das Signal SIGABRT zufangen. Sieht in der beschreibung von 
abort().

von LibraryNewbie (Gast)


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.

von ergen (Gast)


Lesenswert?

LibraryNewbie schrieb:
> 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..

Wenn das Programm in eine entladende Lib springt sollte es einen 
SegFault geben.

Hilft sowas:
http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.