caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Damien Doligez <damien.doligez@inria.fr>
To: Lin Hong <lhong@amnh.org>
Cc: caml users <caml-list@inria.fr>
Subject: Re: [Caml-list] Segmentation fault from Array.append Ocaml 4.0.x -- walk around
Date: Tue, 4 Dec 2012 16:20:21 +0100	[thread overview]
Message-ID: <F27216BC-82C7-4E81-BAD1-61AA55BCC411@inria.fr> (raw)
In-Reply-To: <C960B6881E802A459A09A7DAD55690053E7DACFE@MAIL-MBX-004.internal.amnh.org>

[-- Attachment #1: Type: text/plain, Size: 3590 bytes --]

Hello Lin Hong,

I have found a bug in the C code for Array.append. A patch
against 4.00.1 is attached to this mail.

I couldn't make a small repro case for this bug, so I would
appreciate if you could try this patch an tell me whether it
fixes the problem for you.

Cheers,

-- Damien



On 2012-11-28, at 21:02, Lin Hong wrote:

> Hi, all
> 
> we avoid the problem by creating our version of Array.append. Our version of Array.append looks just like the one from Ocaml 3.12, instead of operating directly on memory, we call get & set function to do the job.
> 
> still have no idea why Array.append from Ocaml4.0.x cause the seg fault, but we will stick to our walk around solution till new version come out.
> 
> Cheers,
> Lin Hong
> American Museum of Natural History
> POY website :
> https://code.google.com/p/poy/
> http://research.amnh.org/scicomp/scripts/download.php
> 
> ________________________________________
> From: caml-list-request@inria.fr [caml-list-request@inria.fr] on behalf of Lin Hong [lhong@amnh.org]
> Sent: Monday, November 19, 2012 12:04 PM
> To: Damien Doligez; caml users
> Subject: RE: [Caml-list] Segmentation fault from Array.append
> 
> Hi,
> 
> we recompiled Ocaml with debug version of runtime, then compiled our program into byte code, run the same data-set , the problem disappear.
> 
> but with native version of our program, the segmentation fault still shows.
> 
> As for native version, if we run it with Gc.compact() being called around Array.append, the problem won't show.
> 
> also gdb point us to some major_slice() function, so we call Gc.major_slice() before Array.append, this also make the problem disappear.
> 
> 
> still don't know what's going on here, any other suggestions are highly appreciated.
> 
> 
> Thanks.
> 
> Cheers,
> Lin Hong
> American Museum of Natural History
> POY website :
> https://code.google.com/p/poy/
> http://research.amnh.org/scicomp/scripts/download.php
> 
> ________________________________________
> From: caml-list-request@inria.fr [caml-list-request@inria.fr] on behalf of Damien Doligez [damien.doligez@inria.fr]
> Sent: Wednesday, October 17, 2012 9:33 AM
> To: caml users
> Subject: Re: [Caml-list] Segmentation fault from Array.append
> 
> Hello,
> 
>> From: Daniel Bünzli [daniel.buenzli@erratique.ch]
>> 
>> http://rwmj.wordpress.com/2010/01/22/tip-tracking-down-ocaml-heap-corruptors/
> 
> 
> I have posted a comment to that blog.  For the archive, here's what it says:
> 
> Starting with OCaml 4.00.0, there is an easy way to activate the debug version of the runtime:
> 
> 1. configure OCaml with "-with-debug-runtime"
> 2. compile and install OCaml
> 3. compile your program with "-runtime-variant d"
> 
> This will compile your program with a version of the runtime which has assertions all over the place, and does a thorough check of the heap structure at each major GC (and at each compaction). If you then follow Rich’s advice, you should be able to narrow down the source of the heap corruption quite easily.
> 
> -- Damien
> 
> 
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
> 
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs

[-- Attachment #2: 0000-array-append-segfault.patch --]
[-- Type: application/octet-stream, Size: 705 bytes --]

Index: byterun/array.c
===================================================================
--- byterun/array.c	(revision 13107)
+++ byterun/array.c	(working copy)
@@ -321,11 +321,12 @@
            count--, src++, pos++) {
         caml_initialize(&Field(res, pos), *src);
       }
-      /* Many caml_initialize in a row can create a lot of old-to-young
-         refs.  Give the minor GC a chance to run if it needs to. */
-      res = caml_check_urgent_gc(res);
     }
     Assert(pos == size);
+
+    /* Many caml_initialize in a row can create a lot of old-to-young
+       refs.  Give the minor GC a chance to run if it needs to. */
+    res = caml_check_urgent_gc(res);
   }
   CAMLreturn (res);
 }

  reply	other threads:[~2012-12-04 15:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-28 20:02 Lin Hong
2012-12-04 15:20 ` Damien Doligez [this message]
2012-12-05  4:13   ` Lin Hong

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=F27216BC-82C7-4E81-BAD1-61AA55BCC411@inria.fr \
    --to=damien.doligez@inria.fr \
    --cc=caml-list@inria.fr \
    --cc=lhong@amnh.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;
as well as URLs for NNTP newsgroup(s).