caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Goswin von Brederlow <goswin-v-b@web.de>
To: Gerd Stolpmann <info@gerd-stolpmann.de>
Cc: Lauri Alanko <la@iki.fi>,  caml-list@inria.fr
Subject: Re: AW: [Caml-list] Channels not closed on gc?
Date: Tue, 29 May 2012 14:08:55 +0200	[thread overview]
Message-ID: <87fwajtciw.fsf@frosties.localnet> (raw)
In-Reply-To: <1337601452.19263.0@samsung> (Gerd Stolpmann's message of "Mon, 21 May 2012 13:57:32 +0200")

Gerd Stolpmann <info@gerd-stolpmann.de> writes:

> Am 21.05.2012 13:23:36 schrieb(en) Lauri Alanko:
>> I only recently noticed that ocaml does not close open channels when  
>> they are garbage collected. This is evidently intentional behavior,  
>> but it was quite unexpected.
>> 
>> To be clear, I do think it's bad style to rely on GC for releasing OS  
>> resources, but that doesn't explain why GC shouldn't do this if the  
>> programmer has failed to explicitly close the channel. And if the  
>> intention were to _enforce_ good style, the channel finaliser would  
>> spout out an error or warning upon detecting that the channel hasn't  
>> yet been closed, instead of just silently leaking file handles like  
>> it does currently.
>> 
>> It is of course trivial to "fix" this by attaching a simple  
>> finaliser, but the fact that this is not done by default makes me  
>> suspect that there would be something fishy with this approach. So,  
>> what's the rationale for the current behavior?
>
> It's predictable.

Predictably buggy.

> Closing a channel is not only about releasing OS resources. Imagine the  
> channel is actually a pipe - closing it means to signal EOF, i.e. it's  
> a way of notifying another program about an event. This should not  
> happen behind one's back.

If your channel is a pipe and you need it to stay open then keep it
alive. If you need to control when it is closed than close it when you
want it to be close, which you can only do as long as it stays alive.

So this argument is realy not an argument.

Note that nobody suggested restricting closing of channels to just the
GC. Only to have the GC double check and close them before they leak. If
you do it right then nothing changes. But if you did it wrong the GC
will catch that.

> Closing a regular file would in deed be harmless, but there is no  
> generic way to identify such channels (in the OS).
>
> Gerd


Lets compare this feature to boundary checks for strings and arrays. In
correct code they are completly and utterly pointless since we know all
our access remains within bounds. Still we do check because we know that
not all code is correct.

Same with channels (and Unix.file_descr). If your code is correct and
you properly close them all correctly it is pointless for the GC to
check and close them. But still this should be done to catch those cases
where the programmer forgot about it. And this check would be a lot
cheaper than boundary checks. It only checks once on destruction.

And I agree that such a case should output a warning because people
should not start to assume the GC will close the channel, it doesn't do
so determnistically nor when the program terminates. Not closing a
channel is a resource mismanagement in the code so te code should be
fixed. The GC should just help to spot such cases.

MfG
        Goswin

  parent reply	other threads:[~2012-05-29 12:08 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-21 11:23 Lauri Alanko
2012-05-21 11:57 ` AW: " Gerd Stolpmann
2012-05-21 12:53   ` Philippe Wang
2012-05-21 13:31     ` Gerd Stolpmann
2012-05-21 14:18       ` Philippe Wang
2012-05-21 14:48         ` Mehdi Dogguy
2012-05-29 12:08   ` Goswin von Brederlow [this message]
2012-05-29 12:46     ` AW: " Gerd Stolpmann
2012-05-29 14:13       ` oliver
2012-05-29 18:39         ` Török Edwin
2012-05-29 18:58           ` Philippe Veber
2012-05-29 12:49     ` Jérémie Dimino

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fwajtciw.fsf@frosties.localnet \
    --to=goswin-v-b@web.de \
    --cc=caml-list@inria.fr \
    --cc=info@gerd-stolpmann.de \
    --cc=la@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).