From: Matthieu Brucher <Matthieu.Brucher@wanadoo.fr>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] memory leak in C snippet?
Date: Fri, 31 Dec 2004 10:35:49 +0100 [thread overview]
Message-ID: <41D51D75.5010406@wanadoo.fr> (raw)
In-Reply-To: <2D67CB0C-5907-11D9-B386-000A95A068A6@reddwarf.xs4all.nl>
Hello
I'm not very into Ocaml at the moment, so perhaps what I will say isn't
relevant, but you seem to allocate 2 memory blocs in your function
(alloc_string and alloc_tuple), but where do you free this memory ? Does
OCaml take charge of this or do you still have to do it yourself as it
is in a C function ?
Happy new year.
Matthieu
Lodewijk Voge wrote:
> hello,
>
> I'm writing a daemon in ocaml with some glue code in C. it all works
> fine, except memory seems to leak to a point the daemon can last
> only about a week on the smallest systems. after a lot of removing
> code I come to this snippet that seems to leak:
>
> external bar: unit -> Unix.inet_addr * unit = "bar"
>
> let _ =
> let s = String.create 392 in
> while true do
> ignore(bar ());
> done
>
> with
>
> CAMLprim value bar(value unit) {
> CAMLparam1(unit);
> CAMLlocal2(res, addr);
> int i;
>
> addr = alloc_string(4);
> *(int *)(String_val(addr)) = htonl(0xac100000);
> res = alloc_tuple(2);
> Store_field(res, 0, addr);
> Store_field(res, 1, Val_unit);
> CAMLreturn(res);
> }
>
> which gives when run:
>
> ~/test$ while /usr/bin/true; do ps -o rss -p 15696 | tail -1; sleep 2;
> done
> 784
> 784
> 788
> 792
> 796
> 800
> 804
> 808
> 812
> ^C
>
> an ever growing RSS. strangely, having bar() return just the alloced
> string instead of a tuple, this doesn't occur. even more strangely, if
> I delete the let s = String.make 392 line, it doesn't occur either.
> systems tested are MacOS X, FreeBSD (the target system) and Linux. as
> the RSS approaches the segment size that'll expand too, and this
> gobbles up all available virtual memory in a week on the smallest
> target systems.
>
> so, my question is: can anyone see an obvious error in the C snippet?
> some violation of the rules in the manual I missed?
>
> thanks,
> Lodewijk
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.298 / Virus Database: 265.6.7 - Release Date: 30/12/2004
next prev parent reply other threads:[~2004-12-31 9:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-28 19:32 Lodewijk Voge
2004-12-31 9:35 ` Matthieu Brucher [this message]
2004-12-31 11:14 ` [Caml-list] " Lodewijk Voge
2004-12-31 15:10 ` Jon Harrop
2004-12-31 15:48 ` Lodewijk Voge
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=41D51D75.5010406@wanadoo.fr \
--to=matthieu.brucher@wanadoo.fr \
--cc=caml-list@inria.fr \
/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