From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 6DD35BBAF for ; Fri, 11 Jul 2008 11:40:55 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApoEAIrHdkhQRFuw/2dsb2JhbACwTg X-IronPort-AV: E=Sophos;i="4.30,344,1212357600"; d="scan'208";a="15022051" Received: from furbychan.cocan.org ([80.68.91.176]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES256-SHA; 11 Jul 2008 11:40:54 +0200 Received: from rich by furbychan.cocan.org with local (Exim 4.63) (envelope-from ) id 1KHF7T-0006aY-1Z; Fri, 11 Jul 2008 10:40:51 +0100 Date: Fri, 11 Jul 2008 10:40:50 +0100 To: Sean Seefried Cc: caml-list@yquem.inria.fr Subject: Re: [Caml-list] Heaps size problems with "caml_alloc_small" in foreign function interfaces Message-ID: <20080711094050.GB24400@annexia.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.13 (2006-08-11) From: Richard Jones X-Spam: no; 0.00; alloc:01 alloc:01 allocations:01 wosize:01 initialized:01 segfault:01 bug:01 malloc:01 bug:01 garbage:01 garbage:01 wrote:01 stack:01 stack:01 heap:01 On Fri, Jul 11, 2008 at 06:21:51PM +1000, Sean Seefried wrote: > I'm having a problem where sometimes a call to "caml_alloc_small" from > C results in a segmentation fault. If I increase the size of the stack > using OCAMLRUNPARAM=s=1000k then I don't get the crash anymore. It > seems strange that I have to increase the size of the heap manually > like this. Is this because I'm calling this function from C? Seems like you have confusion over heap & stack. First of all, caml_alloc_small is limited to small allocations, so number of words allocated must be <= Max_young_wosize. You don't post any example code so we can't see whether that is true in your code. Secondly (and much more likely to be the problem), the caml_alloc* functions allocate uninitialised memory. If the garbage collector gets to run before you've properly initialized all the fields then the GC will hit an uninitialised field and a segfault could be the result. eg: This is a fail: v = caml_alloc (2, 0); vv = caml_alloc (3, 0); /* GC could run here */ Store_field (v, 0, vv); Changing the _stack_ size (or other tunables) probably just changes something about when the garbage collector runs, and thus moves the bug around. > If I want to increase the size of the heap in C how do I do this? > Could I write a "safe" caml_alloc_small which first checks to see if > there is enough memory and then increases the heap size if not? The "size of the heap in C" is (for most operating systems) extended automatically by malloc. What you're saying here isn't necessary - you must have some other bug. I suggest you post some code which exhibits the problem. Rich. -- Richard Jones Red Hat