Bertrand Jeannet
2016-10-10 13:14:54 UTC
Dear list,
The following piece of code raises an assert false exception (in rare
cases) with official version 4.03.0:
match Ephemeron.K1.get_data c with
| Some _ ->
match Ephemeron.K1.get_key c with
| Some _ -> (* ... *)
| None -> assert false (* reachable *)
Before I had called the function K1.set_key_data with a key
* that belongs to a weak hashed set
* and that is used after the call
(this may be important or not).
The documentation of the Ephemeron module says:
"When one of the keys is not considered alive anymore by the GC, the
data is emptied from the ephemeron"
I was expecting this to happen atomically from the programmer point of
view, but here apparently the key was emptied but the data kept (at
least temporarily).
Was this behavior anticipated ?
IMHO, synchronized deletion is simpler and safer (in previous versions,
I encountered the now-solved-bug that the deletion of several weak
pointers to the same object was not synchronized).
Btw, the Ephemeron module does not appear on this url:
http://caml.inria.fr/pub/docs/manual-ocaml/stdlib.html
one has to go to
http://caml.inria.fr/pub/docs/manual-ocaml/libref/index.html
Best regards
The following piece of code raises an assert false exception (in rare
cases) with official version 4.03.0:
match Ephemeron.K1.get_data c with
| Some _ ->
match Ephemeron.K1.get_key c with
| Some _ -> (* ... *)
| None -> assert false (* reachable *)
Before I had called the function K1.set_key_data with a key
* that belongs to a weak hashed set
* and that is used after the call
(this may be important or not).
The documentation of the Ephemeron module says:
"When one of the keys is not considered alive anymore by the GC, the
data is emptied from the ephemeron"
I was expecting this to happen atomically from the programmer point of
view, but here apparently the key was emptied but the data kept (at
least temporarily).
Was this behavior anticipated ?
IMHO, synchronized deletion is simpler and safer (in previous versions,
I encountered the now-solved-bug that the deletion of several weak
pointers to the same object was not synchronized).
Btw, the Ephemeron module does not appear on this url:
http://caml.inria.fr/pub/docs/manual-ocaml/stdlib.html
one has to go to
http://caml.inria.fr/pub/docs/manual-ocaml/libref/index.html
Best regards
--
Caml-list mailing list. Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs
Caml-list mailing list. Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs