Finalisers

From: skaller (skaller@maxtal.com.au)
Date: Sun Jan 16 2000 - 14:17:37 MET

  • Next message: skaller: "Finalisation patch"

      Short note to David: in ocaml 2.999 [with Gc.finalise function]:
    >
    > I have used Gc.finalise in Viper to implement __del__ methods.
    > A short test (create an instance of a python class with a __del__
    > method, then forget it) worked correctly.

            Thoughts:

    > Suppose there are two objects, A and B, with a pointer
    > in A to B but not vice versa.
    > Suppose A becomes globally unreachable (and suppose
    > B is thereby also unreachable).
    >
    > It is important to run the finaliser for A before
    > the finaliser for B in this case, since the finaliser
    > for A can refer to B: B is reachable from A.
    > Indeed, in Python's reference counting scheme,
    > this behaviour is guarranteed.
    >
    > Interscript _requires_ that this ordering apply
    > to finalisation. In particular, when a weaver object
    > is finalised, it generates the table of contents
    > of some document, the output goes to file objects.
    > It is important the file objects are not finalised
    > until _after_ the weaver object has generated
    > the table of contents.
    >
    > In general, if A and B become unreachable, and there
    > is a pointer from A to B, but not from B to A,
    > then the finaliser of A must be run to completion
    > before the finaliser for B is invoked.
    >
    > This rule cannot be applied when there is a circular dependency:
    > in that case, one can consider that it would be a programming
    > error on the client's part to write finalisers that depended
    > on the 'other' object's unfinalised state. [Since application
    > of the rule would deadlock the finalisers, and neither
    > would run -- leaving garbage around]
    >
    > It is NOT clear to me why interscript would core dump
    > if these semantics were not provided: it would fail
    > to operate correctly (generate wrong output), but not crash.

    -- 
    John (Max) Skaller, mailto:skaller@maxtal.com.au
    10/1 Toxteth Rd Glebe NSW 2037 Australia voice: 61-2-9660-0850
    homepage: http://www.maxtal.com.au/~skaller
    download: ftp://ftp.cs.usyd.edu/au/jskaller
    



    This archive was generated by hypermail 2b29 : Sun Jan 16 2000 - 22:36:57 MET