From 18beb7a33db3f3e57f445ba42984b8892e0dfce5 Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Wed, 11 Aug 2010 15:07:18 -0700 Subject: Increment ref counts of objects sent along channels. --- src/boot/me/trans.ml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml index 4fe63012..037c18a7 100644 --- a/src/boot/me/trans.ml +++ b/src/boot/me/trans.ml @@ -2258,8 +2258,17 @@ let trans_visitor trans_void_upcall "upcall_join" [| trans_atom (Ast.ATOM_lval task) |] and trans_send (chan:Ast.lval) (src:Ast.lval) : unit = - let (srccell, _) = trans_lval src in - aliasing false srccell + let (src_cell, src_ty) = trans_lval src in + begin + match (ty_mem_ctrl src_ty) with + | MEM_rc_opaque + | MEM_rc_struct + | MEM_gc -> + iflog (fun _ -> annotate "incr_refcount of src obj"); + incr_refcount src_cell; + | _ -> () + end; + aliasing false src_cell begin fun src_alias -> trans_void_upcall "upcall_send" -- cgit v1.2.3