From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Library cleanup Date: Tue, 20 May 2014 21:51:53 +0200 Organization: cbb software GmbH Message-ID: <1kyb65bhjooz0$.ckh7ua10pjbk$.dlg@40tude.net> References: <1vqik1odcvjrw$.tsdp6cr7bp5y.dlg@40tude.net> Reply-To: mailbox@dmitry-kazakov.de NNTP-Posting-Host: AuYlnUSfTZrfhAkRjyySpQ.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: 40tude_Dialog/2.0.15.1 X-Notice: Filtered by postfilter v. 0.8.2 Xref: news.eternal-september.org comp.lang.ada:19939 Date: 2014-05-20T21:51:53+02:00 List-Id: 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