From: Henri DF <henri.dubois-ferriere@epfl.ch>
To: Ker Lutyn <ker527mail@yahoo.com>
Cc: caml-list@inria.fr, <rich@annexia.org>
Subject: Re: [Caml-list] file descriptor leaks?
Date: Tue, 4 May 2004 11:15:44 +0200 (CEST) [thread overview]
Message-ID: <Pine.LNX.4.44.0405041112110.29917-100000@lcmpc4.epfl.ch> (raw)
In-Reply-To: <20040504074648.GA29829@bourg.inria.fr>
here's a relevant message explaining why ocaml gc doesn't collect file
descriptiors:
http://caml.inria.fr/archives/200311/msg00264.html
By the way , from R. Jones tutorial (chap 9), i saw:
<quote>Calls to read_file open the file but don't close it. Because OCaml
uses a
full garbage collector chan isn't collected until some (unknown,
asynchronous) time later when the minor heap becomes full. This means that
open file descriptors build up waiting to be collected in one go. If files
is a long list, then this code is likely to fail when the OS limit on the
number of open files is reached.
</quote>
which i guess is inaccurrate?
henri
On Tue, 4 May 2004, Basile Starynkevitch local wrote:
> On Mon, May 03, 2004 at 04:32:32PM -0700, Ker Lutyn wrote:
> [...]
>
> > Assuming f does not close the fd when it's done, [...] is this
> > better?
> >
> > while true do
> > let fd, _ = Unix.accept sock in
> > let g fd = try f fd; Unix.close fd with e -> Unix.close fd; raise e in
> > ignore (Thread.create g fd)
> > done
> >
>
> Yes. First, a file descriptor is mostly heavy in the OS kernel side;
> inside a process, an fd is just an integer. To free the fd (kernel)
> resource, you *have* to call Unix.close (i.e. to call the close(2)
> system call).
>
> Second, there are no implicit call to the close(2) system call inside
> the Ocaml system (there used to be, long time ago, implicit close of
> channels by the GC. This finalization is gone).
>
> So yes, every file descriptor you got thru accept has to be explicitly
> closed. Some higher level functions in the Unix library happen to do
> so.
>
>
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2004-05-04 9:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-03 23:32 Ker Lutyn
2004-05-04 7:46 ` Basile Starynkevitch local
2004-05-04 9:15 ` Henri DF [this message]
2004-05-04 9:31 ` Richard Jones
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=Pine.LNX.4.44.0405041112110.29917-100000@lcmpc4.epfl.ch \
--to=henri.dubois-ferriere@epfl.ch \
--cc=caml-list@inria.fr \
--cc=ker527mail@yahoo.com \
--cc=rich@annexia.org \
/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