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