[
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: | 2004-09-05 (22:37) |
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