Skip to content

Commit

Permalink
[ident][multicore] use domain local storage for name generators
Browse files Browse the repository at this point in the history
Summary: Make Ident.NameGenerator thread safe by using domain local storage.

Reviewed By: dulmarod

Differential Revision:
D69510350

Privacy Context Container: L1208441

fbshipit-source-id: f4767f8ced8a2f662c219a1ab444e0f703be13f4
  • Loading branch information
ngorogiannis authored and facebook-github-bot committed Feb 12, 2025
1 parent c686265 commit 31e1aea
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions infer/src/IR/Ident.ml
Original file line number Diff line number Diff line change
Expand Up @@ -112,24 +112,24 @@ module NameGenerator = struct
let create () : t = NameHash.create 17

(** Map from names to stamps. *)
let name_map = ref (create ())
let name_map = DLS.new_key create

let get_current () = !name_map
let get_current () = DLS.get name_map

let set_current map = name_map := map
let set_current map = DLS.set name_map map

(** Reset the name generator *)
let reset () = name_map := create ()
let reset () = DLS.set name_map (create ())

(** Create a fresh identifier with the given kind and name. *)
let create_fresh_ident kind name =
let stamp =
try
let stamp = NameHash.find !name_map name in
NameHash.replace !name_map name (stamp + 1) ;
let stamp = NameHash.find (DLS.get name_map) name in
NameHash.replace (DLS.get name_map) name (stamp + 1) ;
stamp + 1
with Stdlib.Not_found ->
NameHash.add !name_map name 0 ;
NameHash.add (DLS.get name_map) name 0 ;
0
in
{kind; name; stamp}
Expand All @@ -138,10 +138,10 @@ module NameGenerator = struct
(** Make sure that fresh ids after whis one will be with different stamps *)
let update_name_hash name stamp =
try
let curr_stamp = NameHash.find !name_map name in
let curr_stamp = NameHash.find (DLS.get name_map) name in
let new_stamp = max curr_stamp stamp in
NameHash.replace !name_map name new_stamp
with Stdlib.Not_found -> NameHash.add !name_map name stamp
NameHash.replace (DLS.get name_map) name new_stamp
with Stdlib.Not_found -> NameHash.add (DLS.get name_map) name stamp
end

(** Name used for the return variable *)
Expand Down

0 comments on commit 31e1aea

Please sign in to comment.