caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
To: <caml-list@inria.fr>
Subject: [Caml-list] Problem with GC and custom blocks
Date: Tue, 25 Mar 2003 11:31:02 +0100 (CET)	[thread overview]
Message-ID: <Pine.LNX.4.30.0303251124100.29167-100000@linux17.zdv.uni-tuebingen.de> (raw)

Hi,

I'm having trouble with the GC destroying my custom blocks, although
it looks like I have properly protected them. Unfortunately, I cannot
reproduce it with a small testcase. Here's part of the source and its
output:

static inline value alloc_graph(unsigned n,
				unsigned vertex_bits, unsigned edge_bits)
{
    value r = alloc_custom((struct custom_operations *) &graph_ops,
			   1 << 16, // huge value to trigger bug earlier
			   0, 1);
    long *l = Data_custom_val(r);
    for (int i = 0; i < 32/4; ++i)
	l[i] = 0xefbeadde;
    dumpbytes(r, 32, __PRETTY_FUNCTION__);
    return r;
}
static inline value clone_graph(const struct graph *g)  {
    dumpbytes(((char*) g)  - 4, 32, __PRETTY_FUNCTION__ " in");

    value gv = alloc_graph(g->n, g->vertex_bits, g->edge_bits);
    dumpbytes(((char*) g)  - 4, 32, __PRETTY_FUNCTION__ " post");

    make_copy(Data_custom_val(gv), g);
    dumpbytes(gv, 32, __PRETTY_FUNCTION__ " out");
    return gv;
}

// set_connected: graph -> int -> int -> graph
value set_connected_c(value gv, value iv, value jv) {
    fprintf(stderr, "protecting %p\n", gv);
    CAMLparam3(gv, iv, jv);
    dumpbytes(gv, 32, __PRETTY_FUNCTION__);

    const struct graph *gin = Data_custom_val(gv);
    ulong i = Long_val(iv);
    ulong j = Long_val(jv);
    CAMLlocal1(goutv);
    goutv = clone_graph(gin);
    struct graph *gout = Data_custom_val(goutv);

    set_connected(gout, i, j);
    dumpbytes(goutv, 32, __PRETTY_FUNCTION__ " out");

    CAMLreturn(goutv);
}

[...]
protecting 0x400c8fec
0x400c8fec      set_connected_c 80 e9 07 08 08 00 01 01 00 00 00 00 00 00
00 00
0x400c8fec       clone_graph in 80 e9 07 08 08 00 01 01 00 00 00 00 00 00
00 00
<>allocated_words = 32790
extra_heap_memory = 0u
amount of work to do = 134084u
ordered work = 0 words
computed work = 221332 words
Sweeping 221332 words
$FL size at phase change = 168445
Estimated overhead = 1000000%
Automatic compaction triggered.
Starting new major GC cycle
Marking 2147483647 words
Sweeping 2147483647 words
Measured overhead: 137%
Compacting heap...
Shrinking heap to 2976k bytes
Shrinking heap to 2728k bytes
Shrinking heap to 2480k bytes
done.
0x400ed004          alloc_graph 80 e9 07 08 de ad be ef de ad be ef de ad
be ef
0x400c8fec     clone_graph post 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00

So 0x400c8fec gets mangled, although I protected it. Did I do
something obvious wrong? Or are there any known bugs in the GC? Any
other suggestions how to track this down? I'd be really grateful even for
a workaround...

I'm using ocamlopt 3.06 on i386 Linux, with gcc 3.2.

	Falk

-------------------
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


             reply	other threads:[~2003-03-25 10:31 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-25 10:31 Falk Hueffner [this message]
2003-03-25 18:39 ` Damien Doligez
2003-03-25 18:51   ` Falk Hueffner

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.30.0303251124100.29167-100000@linux17.zdv.uni-tuebingen.de \
    --to=falk.hueffner@student.uni-tuebingen.de \
    --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;
as well as URLs for NNTP newsgroup(s).