[
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: | Olivier Andrieu <andrieu@i...> |
| Subject: | Re: [Caml-list] lablgtk2 & GC compact |
Shivkumar Chandrasekaran [Fri, 03 Sep 2004]:
> I read in SooHyoung Oh's excellent lablgtk2 tutorial that automatic
> compaction was turned off in lablgtk2, and that to get compaction
> we must call Gc.compact manually inside the callbacks. Is this
> true?
Well, not with any callback. You have to be sure that higher in the
call stack no GTK function holds a pointer to one of those structures
that LablGTK keeps in the caml major heap (GdkColor, GtkTreeIter,
GtkTextIter mainly). That's not so easy to make sure.
> If so, how do I turn "automatic compaction" back on once I enter the
> callback, and off when I exit it? The manual seems to suggest
> Gc.set { (Gc.get()) with Gc.max_overhead = 500 }
> as the way to turn it on to automatic, and
> Gc.set { (Gc.get()) with Gc.max_overhead = 1000000 }
> the way to turn it off again. Is this the right thing to do with
> lablgtk2?
Yes you could do this but of course you'll get a compaction only if a
major GC cycle occurs during the callback (and the conditions for a
compaction are met).
No, I think the idea is rather to let automatic compaction disabled
and do manual compaction sometimes. I think it is safe to do so inside
a glib timeout, so you could use this to have a compaction happen
every hour :
Glib.Timeout.add ~ms:(1000 * 60 * 60)
~callback:(fun () -> Gc.compact () ; true)
--
Olivier
-------------------
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