comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Library cleanup
Date: Tue, 20 May 2014 21:51:53 +0200
Date: 2014-05-20T21:51:53+02:00	[thread overview]
Message-ID: <1kyb65bhjooz0$.ckh7ua10pjbk$.dlg@40tude.net> (raw)
In-Reply-To: llg39k$87a$1@speranza.aioe.org

On Tue, 20 May 2014 20:27:20 +0300, Victor Porton wrote:

> Dmitry A. Kazakov wrote:
> 
>> On Tue, 20 May 2014 15:56:40 +0300, Victor Porton wrote:
>> 
>>> I am writing bindings for a C library which requires both initialization
>>> and cleanup:
>>> 
>>> [[[
>>> raptor_init()
>>> raptor_finish()
>>> 
>>> Initialise and cleanup the library. These must be called before any
>>> raptor class such as raptor_parser, raptor_uri is created or used. Note:
>>> as of 1.4.19 these are wrappers around a static instance of the new
>>> raptor_world class. In Raptor 2.0 this initialisation and cleanup method
>>> will be removed. ]]]
>>> 
>>> Initialization is clear: I just put it into the handled sequence of
>>> statements of the package (should I also add Elaborate and/or
>>> Elaborate_Body pragma?)
>>> 
>>> But how to do cleanup? That is, where to call raptor_finish()?
>>> 
>>> One way is to create a Limited_Controlled object in the package. Is there
>>> a simpler way?
>> 
>> It is simple enough.
>> 
>> But much simpler is not to call raptor_finish() at all.
>> 
>> If the library is not OS-conformant, to clean up its internal persistent
>> state (does it have any?) upon unloading its instance, for example, when
>> the client application unexpectedly crashes, such a library must be
>> removed from the computer ASAP and never installed again.
> 
> I disagree: It is quite legitimate for a library to create a temporary file, 
> which may be deleted in library cleanup.

Nope. Temporary files are automatically deleted upon closing. And all files
are closed when the application ends. Therefore there is no need to do that
in the cleanup. If temporary files are shared, like file mappings could be,
you don't delete them, because other instances may still use that. Also, no
way.

In any case the cleanup is to be done by system means, because the
application may crash. If cleanup were really necessary you would have to
reboot the system after each application crash. Do anybody want such a
"library"?

And no cleanup is ever needed when the library is not unloaded before the
application ends. For static bindings the library is never unloaded before. 

Even if the library is loaded and unloaded dynamically (you will need a
different kind of bindings then), there exist system means to handle this
within the library, e.g. DLL_PROCESS_DETACH entry.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

      reply	other threads:[~2014-05-20 19:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-20 12:56 Library cleanup Victor Porton
2014-05-20 16:20 ` Dmitry A. Kazakov
2014-05-20 17:27   ` Victor Porton
2014-05-20 19:51     ` Dmitry A. Kazakov [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox