caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Modifying heap from custom finalizers?
@ 2003-12-29  8:25 Nuutti Kotivuori
  2004-01-03 13:47 ` Damien Doligez
  0 siblings, 1 reply; 3+ messages in thread
From: Nuutti Kotivuori @ 2003-12-29  8:25 UTC (permalink / raw)
  To: caml-list

I am wonder how evil of a deed would I be doing to the garbage
collector by modifying the heap in the finalizer of a custom block.

Apparently the finalizers are run during the sweep phase of the major
garbage collector. If I there change a value from the global table to
the unit value - I think the worst I can make happen is that the value
pointed by it does not get reclaimed in the same garbage collection
cycle. But, what about anything more? Assigning values? Creating new
values? Do I have to make sure the small heap stays empty? And if
zeroing the value at sweep phase makes the values pointed by it
garbage collected only at the next collection, is there any I can
speed up the process?

I could find no documentation what you can and what you can't do in
the finalizers for custom blocks.

TIA,
-- Naked

-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] Modifying heap from custom finalizers?
  2003-12-29  8:25 [Caml-list] Modifying heap from custom finalizers? Nuutti Kotivuori
@ 2004-01-03 13:47 ` Damien Doligez
  2004-01-05 17:37   ` Nuutti Kotivuori
  0 siblings, 1 reply; 3+ messages in thread
From: Damien Doligez @ 2004-01-03 13:47 UTC (permalink / raw)
  To: caml-list

On Monday, December 29, 2003, at 09:25 AM, Nuutti Kotivuori wrote:

> I am wonder how evil of a deed would I be doing to the garbage
> collector by modifying the heap in the finalizer of a custom block.

Ouch !  Tricky questions ahead !


> Apparently the finalizers are run during the sweep phase of the major
> garbage collector. If I there change a value from the global table to
> the unit value -

I think that should work.

>  But, what about anything more?

It's hard to tell what will break the invariants of the GC.  My
recommendation is that you do none of the following.

>  Assigning values?

I guess it would work, as long as you're not making anything
point to the minor heap (see below), and that you're not getting
the values from weak arrays, and maybe some other strange corner
cases.

>  Creating new values?

No.  There might be a way to make it work, but it'll be so hairy
I don't even want to think about it.

>  Do I have to make sure the small heap stays empty?

If you allocate in the minor heap, it can trigger a minor
collection, which will reenter the major GC, maybe even call the
compactor.  Crash.

>  And if zeroing the value at sweep phase makes the values pointed by it
> garbage collected only at the next collection, is there any I can
> speed up the process?

What makes you think there is no other pointer to these values ?
And to the things pointed by these values ?

> I could find no documentation what you can and what you can't do in
> the finalizers for custom blocks.

You should enter this in the bug tracking system as a feature wish.

-- Damien

-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] Modifying heap from custom finalizers?
  2004-01-03 13:47 ` Damien Doligez
@ 2004-01-05 17:37   ` Nuutti Kotivuori
  0 siblings, 0 replies; 3+ messages in thread
From: Nuutti Kotivuori @ 2004-01-05 17:37 UTC (permalink / raw)
  To: Damien Doligez; +Cc: caml-list

Damien Doligez wrote:

[...]

>> And if zeroing the value at sweep phase makes the values pointed by
>> it garbage collected only at the next collection, is there any I
>> can speed up the process?
>
> What makes you think there is no other pointer to these values ?
> And to the things pointed by these values ?

These values are values in the global data array - which is allocated
separately. The only things (well, debugger and toplevel do some
hacks) accessing these are SETGLOBAL and GETGLOBAL instructions in the
actual code blocks. The only thing that can create new GETGLOBAL
instructions for the slots in future code is the ident table in
Symtable. So if no existing code block, nor the ident table,
references the global, it can be zeroed out - since nothing can read
it's value.

The globals for modules contain a pointer to an array which holds the
closures for the functions defined by the module. This array can then
be reclaimed by the garbage collector - and if all the closures for a
certain module stop existing, the code block in turn is garbage
collected.

This should all be briefly described in the mail I sent earlier about
the second phase of the approach.

>> I could find no documentation what you can and what you can't do in
>> the finalizers for custom blocks.
>
> You should enter this in the bug tracking system as a feature wish.

Indeed. I shall do that.

I managed to catch a rather nasty flu just before christmas, and some
personal issues came up recently - so I shall make no promises on the
time schedule with which I'm implementing all this.

-- Naked

-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-01-05 17:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-12-29  8:25 [Caml-list] Modifying heap from custom finalizers? Nuutti Kotivuori
2004-01-03 13:47 ` Damien Doligez
2004-01-05 17:37   ` Nuutti Kotivuori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).