From 68f5a3fd6202f49854f6e21226221d2ea892ced5 Mon Sep 17 00:00:00 2001 From: Jacques Garrigue Date: Mon, 17 Nov 2003 03:54:06 +0000 Subject: [PATCH] protect against races git-svn-id: http://caml.inria.fr/svn/ocaml/branches/fastclass@5924 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02 --- bytecomp/translclass.ml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bytecomp/translclass.ml b/bytecomp/translclass.ml index a9d7d880cf65..d6af5244abb2 100644 --- a/bytecomp/translclass.ml +++ b/bytecomp/translclass.ml @@ -554,17 +554,18 @@ let transl_class ids cl_id arity pub_meths cl = ltable table ( lclass ( Lsequence( - lset cached 0 (Lapply(Lvar class_init, [Lvar table])), + lset cached 1 (Lapply(Lvar class_init, [Lvar table])), Lsequence ( Lapply (oo_prim "init_class", [Lvar table]), - lset cached 1 (Lvar class_init) + (* field 0 must be set last to avoid race conditions *) + lset cached 0 (Lvar class_init) ))))), make_envs ( if ids = [] then Lapply(lfield cached 0, [lenvs]) else Lprim(Pmakeblock(0, Immutable), - [Lapply(lfield cached 0, [lenvs]); - lfield cached 1; + [Lapply(lfield cached 1, [lenvs]); lfield cached 0; + lfield cached 1; lenvs])))) (* example: