Browse thread
Heaps size problems with "caml_alloc_small" in foreign function interfaces
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Sean Seefried <sean.seefried@n...> |
| Subject: | Re: [Caml-list] Heaps size problems with "caml_alloc_small" in foreign function interfaces |
On 11/07/2008, at 7:40 PM, Richard Jones wrote: > 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. > caml_alloc_small(32,0); is what seemed to cause the problem. I'm shying away from posting more code since it is auto-generated from CamlIDL and is very verbose. I didn't write it myself. > Secondly (and much more likely to be the problem), the caml_alloc* > functions allocate uninitialised memory. If the garbage collector What do you mean by "uninitialised memory"? > 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); > What do you do about this? Is there a way to stop the GC from running for a period of time? > 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 wasn't very clear but I meant changing the OCaml heap size using C functions. Sean