about summary refs log tree commit diff
path: root/pkg/lang/vm/value/value.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-08-29 22:23:04 +0000
committerMel <einebeere@gmail.com>2022-08-29 22:23:04 +0000
commit40b5571547b33ab3749aebfeca716777b744cdec (patch)
treeb832ae25399634a602134e28268272523c9a11f4 /pkg/lang/vm/value/value.go
parentb4a0f2209026a90bfd67072526f938e00c00af78 (diff)
downloadjinx-40b5571547b33ab3749aebfeca716777b744cdec.tar.zst
jinx-40b5571547b33ab3749aebfeca716777b744cdec.zip
Fix outlet leak when outlet value points to itself
Diffstat (limited to 'pkg/lang/vm/value/value.go')
-rw-r--r--pkg/lang/vm/value/value.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/pkg/lang/vm/value/value.go b/pkg/lang/vm/value/value.go
index e2750f4..21cf962 100644
--- a/pkg/lang/vm/value/value.go
+++ b/pkg/lang/vm/value/value.go
@@ -177,7 +177,9 @@ func (v Value) Clone(m mem.Mem) (Value, error) {
 func (v Value) Drop(m mem.Mem) error {
 	// If value has an outlet, don't drop it and instead move it to the outlet.
 	if !v.outlet.IsNull() {
-		return m.Set(v.outlet, OutletCell(v))
+		outlet := v.outlet
+		v.outlet = mem.NullPtr // Reset outlet to null
+		return m.Set(outlet, OutletCell(v))
 	}
 
 	if v.t == StringType {