comp.lang.ada
 help / color / mirror / Atom feed
* Library cleanup
@ 2014-05-20 12:56 Victor Porton
  2014-05-20 16:20 ` Dmitry A. Kazakov
  0 siblings, 1 reply; 4+ messages in thread
From: Victor Porton @ 2014-05-20 12:56 UTC (permalink / raw)


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?

-- 
Victor Porton - http://portonvictor.org

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Library cleanup
  2014-05-20 12:56 Library cleanup Victor Porton
@ 2014-05-20 16:20 ` Dmitry A. Kazakov
  2014-05-20 17:27   ` Victor Porton
  0 siblings, 1 reply; 4+ messages in thread
From: Dmitry A. Kazakov @ 2014-05-20 16:20 UTC (permalink / raw)


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.

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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Library cleanup
  2014-05-20 16:20 ` Dmitry A. Kazakov
@ 2014-05-20 17:27   ` Victor Porton
  2014-05-20 19:51     ` Dmitry A. Kazakov
  0 siblings, 1 reply; 4+ messages in thread
From: Victor Porton @ 2014-05-20 17:27 UTC (permalink / raw)


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.

-- 
Victor Porton - http://portonvictor.org


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Library cleanup
  2014-05-20 17:27   ` Victor Porton
@ 2014-05-20 19:51     ` Dmitry A. Kazakov
  0 siblings, 0 replies; 4+ messages in thread
From: Dmitry A. Kazakov @ 2014-05-20 19:51 UTC (permalink / raw)


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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-05-20 19:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox