Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] lablgtk2 & GC compact
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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