Nim icon indicating copy to clipboard operation
Nim copied to clipboard

ORC runs into infinite recursion

Open theamarin opened this issue 2 years ago • 8 comments

Description

I can manage ORC to run into an apparently infinite recursion, which obviously should not happen.

Nim Version

The commit that breaks ORC for me is 71dc929ad. It works with 02be212da but fails with 71dc929ad.

Current Output

[Suite] module
  [OK] attach_and_update
Traceback (most recent call last)
.../nim-lang/lib/system/iterators.nim(78) tests
.../nim-lang/lib/system.nim(910) newModule
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
(1874 calls omitted) ...
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(385) collectCycles
.../nim-lang/lib/system/orc.nim(340) collectCyclesBacon
.../nim-lang/lib/system/orc.nim(97) free
.../nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
.../nim-lang/lib/system/orc.nim(475) rememberCycle
.../nim-lang/lib/system/orc.nim(415) registerCycle
.../nim-lang/lib/system/orc.nim(375) collectCycles
.../nim-lang/lib/system/cellseqs_v2.nim(37) init
.../nim-lang/lib/system/alloc.nim(1052) alloc
.../nim-lang/lib/system/alloc.nim(895) rawAlloc
.../nim-lang/lib/system/alloc.nim(654) getBigChunk
.../nim-lang/lib/system/alloc.nim splitChunk
.../nim-lang/lib/system/alloc.nim(580) splitChunk2
.../nim-lang/lib/system/alloc.nim(563) updatePrevSize
.../nim-lang/lib/system/alloc.nim(528) isAccessible
.../nim-lang/lib/system/alloc.nim pageIndex
Error: call depth limit reached in a debug build (2000 function calls). You can change it with -d:nimCallDepthLimit=<int> but really try to avoid deep recursions instead.

Expected Output

[Suite] module
  [OK] attach_and_update
  [OK] attach_signal

Possible Solution

Revert or fix 71dc929ad

Additional Information

If I skip the test attach_and_update, the test attach_signal succeeds, so there obviously is a dependency on code that ran previously. But this makes it unclear to me how to create a minimal failing example.

Any input is appreciated.

theamarin avatar Nov 10 '23 09:11 theamarin

Well, you should figure out which type is wrongly classified by canFormAcycle. Might try add {.acyclic.} to some types. Not sure it's a false positive or the case.

There is a handy function, which can be used for this task:

proc isCyclic(t: typedesc): bool {.magic: "TypeTrait".} =
  ## Returns true if the type can potentially form a cyclic type

ringabout avatar Nov 10 '23 09:11 ringabout

Hi @ringabout, thank you so much for your quick reply. Actuall if I annotate an object type with {.acyclic.}, the ORC recursion disappears. Also, the isCyclic() function returns true without the annotation and returns false when the type is annotated with {.acyclic.}. But I am convinced that the type actually can be cyclic, which confuses me. Here is the part of the type definition that might be of interest:

   MyNode* = ref object
      yaml*: YamlNode
      dependencies*: OrderedSet[MyNode]
      parent*: MyNode

      case kind*: NodeKind
      of cOne:
         discard
      of cOther:
         anotherReference*: MyNode

Different instances of MyNode may reference each other within dependencies or anotherReference, while parent should form an acyclic tree.

How to proceed? With your input, maybe I can manage to create a minimum failing example.

theamarin avatar Nov 10 '23 10:11 theamarin

But I am convinced that the type actually can be cyclic, which confuses me.

Yeah, it seems that https://github.com/nim-lang/Nim/commit/71dc929ad7d6ecf26c35028c9ae5fe1406837c7c exposed a pre-existing issue, which means it was not a regression.

Did you use it in the multiple threads?

ringabout avatar Nov 10 '23 11:11 ringabout

Did you use it in the multiple threads?

No, everything is single-threaded here.

I'm still working on a minimum breaking example.

theamarin avatar Nov 10 '23 12:11 theamarin

Unfortunately, I did not manage to get the breaking example shorter than the following.

Also, you need to have yaml aka nimyaml installed, I tested it with the following versions:

  • https://github.com/flyx/NimYAML/commit/ab3ff9f (v1.1.0)
  • https://github.com/flyx/NimYAML/commit/84e59c1 (not yet v2.0.0, but includes some fixes)

So it may be that something inside nimyaml is breaking the ORC (@flyx), but even then I think ORC should not crash.

import yaml, yaml/dom

type
   YItem = object
      items {.defaultVal: @[].}: seq[YItem]
      entry: YEntry
      yaml {.transient.}: YamlNode

   YEntryKind = enum
      tkBasic
   YEntry = object
      case kind: YEntryKind
      of tkBasic: basicEntry: string
      yaml {.transient.}: YamlNode

   ZIdentifier = ref object
      item: ZItem
      parent: ZIdentifier

   ZItem = ref object
      y: YItem
      ids: ZIdentifier

func fillYamlNodes(obj: var YItem, y: YamlNode) =
   obj.yaml = y
   for i, x in obj.items.mpairs:
      fillYamlNodes(x, y["items"][i])
   obj.entry.yaml = y["entry"]

proc constructChild(s: var YamlStream, c: ConstructionContext, result: var YEntry) =
   var res: string
   constructChild(s, c, res)
   result = YEntry(kind: tkBasic, basicEntry: res)

proc newItem(y: YItem): ZItem =
   result = ZItem(y: y)
   result.ids = ZIdentifier(item: result)

proc myFunc() =
   var node: YamlNode
   load("""
entry: int
items:
  - entry: int
""", node)

   var stream = represent(node, tsAll, asNone)
   discard stream.next()

   var y: YItem
   construct(stream, y)
   y.fillYamlNodes(node)

   discard newItem(y)

var i = 0
while i < 100:
   echo $i
   myFunc()
   i.inc()

The output is as follows:

0
1
2
3
4
5
6
7
8
9
10
11
Traceback (most recent call last)
~/nim-lang/lib/std/assertions.nim(59) orcbreak
~/orcbreak/src/orcbreak.nim(41) myFunc
~/.nimble/pkgs2/yaml-1.1.0-69800cc68996ea75203b1d3aa706fb37909dada1/yaml/serialization.nim(1386) load
~/.nimble/pkgs2/yaml-1.1.0-69800cc68996ea75203b1d3aa706fb37909dada1/yaml/serialization.nim(1362) construct
~/nim-lang/lib/system.nim(910) constructChild
~/nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
~/nim-lang/lib/system/orc.nim(475) rememberCycle
~/nim-lang/lib/system/orc.nim(415) registerCycle
~/nim-lang/lib/system/orc.nim(385) collectCycles
~/nim-lang/lib/system/orc.nim(340) collectCyclesBacon
~/nim-lang/lib/system/orc.nim(97) free
~/nim-lang/lib/system/orc.nim(510) nimDecRefIsLastCyclicStatic
~/nim-lang/lib/system/orc.nim(475) rememberCycle
~/nim-lang/lib/system/orc.nim(415) registerCycle
~/nim-lang/lib/system/orc.nim(385) collectCycles
~/nim-lang/lib/system/orc.nim(340) collectCyclesBacon
~/nim-lang/lib/system/orc.nim(97) free
   (the last lines repeated)

Does this help you to reproduce the ORC failure?

theamarin avatar Nov 10 '23 15:11 theamarin

This happens also with current NimYAML 2.0.0:

import yaml, yaml/dom

type
   YItem = object
      items {.defaultVal: @[].}: seq[YItem]
      entry: YEntry
      yaml {.transient.}: YamlNode

   YEntryKind = enum
      tkBasic
   YEntry = object
      case kind: YEntryKind
      of tkBasic: basicEntry: string
      yaml {.transient.}: YamlNode

   ZIdentifier = ref object
      item: ZItem
      parent: ZIdentifier

   ZItem = ref object
      y: YItem
      ids: ZIdentifier

func fillYamlNodes(obj: var YItem, y: YamlNode) =
   obj.yaml = y
   for i, x in obj.items.mpairs:
      fillYamlNodes(x, y["items"][i])
   obj.entry.yaml = y["entry"]

proc constructObject(
  ctx: var ConstructionContext,
  result: var YEntry
) =
   var res: string
   ctx.constructObject(res)
   result = YEntry(kind: tkBasic, basicEntry: res)

proc newItem(y: YItem): ZItem =
   result = ZItem(y: y)
   result.ids = ZIdentifier(item: result)

proc myFunc() =
   var node: YamlNode
   load("""
entry: int
items:
  - entry: int
""", node)

   var stream = represent(node)

   discard stream.next()

   var y: YItem
   construct(stream, y)
   y.fillYamlNodes(node)

   discard newItem(y)

var i = 0
while i < 100:
   echo $i
   myFunc()
   i.inc()

Similar output with slightly different stacktrace. What stands out is that the stack trace is wrong:

/nix/store/92w9kra6c4zj4fvp9qr0b6hm6lwbykp7-nim-unwrapped-2.0.0/nim/lib/system.nim(63) test1
/Users/flyx/Projects/NimYAML/test1.nim(44) myFunc
/Users/flyx/Projects/NimYAML/yaml/loading.nim(30) load
/Users/flyx/Projects/NimYAML/yaml/native.nim(1705) construct
/Users/flyx/Projects/NimYAML/yaml/dom.nim(938) constructChild
[… snip …]

dom.nim has fewer than 400 lines, 938 is a lie. In @theamarin 's stacktrace, that line is

~/nim-lang/lib/system.nim(910) constructChild

which is also wrong since constructChild is not defined in system.nim. So maybe that might be a hint to what's wrong?

There a a few lines in NimYAML specifically for ORC but they only concern some calls to shallowCopy (assignment is used instead if ORC is turned on) so I don't think these are the culprits. YamlNode is definitely a type that can contain cycles.

flyx avatar Nov 10 '23 18:11 flyx

I'm looking into this issue

with -d:useMalloc

malloc(): unsorted double linked list corrupted
Segmentation fault (core dumped)

One of the valgrind errors

==14303== 209885 errors in context 166 of 167:
==14303== Invalid read of size 8
==14303==    at 0x11EC9B: eqtrace___OOZOOZhomeZcodespaceZOnimbleZpkgs50Zyaml4550O48O484553a55ef52aea5149ac52d5752f555453ea48ce5748485254dff53a56a5251ZyamlZdom_u627 (in /workspaces/Nim/test6)
==14303==    by 0x11ED5D: eqtrace___OOZOOZhomeZcodespaceZOnimbleZpkgs50Zyaml4550O48O484553a55ef52aea5149ac52d5752f555453ea48ce5748485254dff53a56a5251ZyamlZdom_u609 (in /workspaces/Nim/test6)
==14303==    by 0x10FD41: trace__system_u2884 (in /workspaces/Nim/test6)
==14303==    by 0x110A1A: collectColor__system_u3193 (in /workspaces/Nim/test6)
==14303==    by 0x1113DC: collectCyclesBacon__system_u3262 (in /workspaces/Nim/test6)
==14303==    by 0x11175E: collectCycles__system_u3403 (in /workspaces/Nim/test6)
==14303==    by 0x111B0E: registerCycle__system_u3428 (in /workspaces/Nim/test6)
==14303==    by 0x111C75: rememberCycle__system_u3468 (in /workspaces/Nim/test6)
==14303==    by 0x17EF37: nimDecRefIsLastCyclicStatic (in /workspaces/Nim/test6)
==14303==    by 0x17F0CF: eqdestroy___test54_u205 (in /workspaces/Nim/test6)
==14303==    by 0x180165: eqdestroy___test54_u416 (in /workspaces/Nim/test6)
==14303==    by 0x18031F: rttiDestroy__test54_u1634 (in /workspaces/Nim/test6)
==14303==  Address 0x4a73ac0 is 16 bytes inside a block of size 40 free'd
==14303==    at 0x483CA3F: free (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==14303==    by 0x110BE3: deallocImpl__system_u1745 (in /workspaces/Nim/test6)
==14303==    by 0x110C02: deallocSharedImpl__system_u1758 (in /workspaces/Nim/test6)
==14303==    by 0x110C21: deallocShared (in /workspaces/Nim/test6)
==14303==    by 0x110C4B: alignedDealloc (in /workspaces/Nim/test6)
==14303==    by 0x110D79: nimRawDispose (in /workspaces/Nim/test6)
==14303==    by 0x110E9C: free__system_u2934 (in /workspaces/Nim/test6)
==14303==    by 0x1114E0: collectCyclesBacon__system_u3262 (in /workspaces/Nim/test6)
==14303==    by 0x11175E: collectCycles__system_u3403 (in /workspaces/Nim/test6)
==14303==    by 0x111B0E: registerCycle__system_u3428 (in /workspaces/Nim/test6)
==14303==    by 0x111C75: rememberCycle__system_u3468 (in /workspaces/Nim/test6)
==14303==    by 0x1745FB: nimDecRefIsLastCyclicStatic (in /workspaces/Nim/test6)
==14303==  Block was alloc'd at
==14303==    at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==14303==    by 0x115A3B: alloc0Impl__system_u1743 (in /workspaces/Nim/test6)
==14303==    by 0x115A61: allocShared0Impl__system_u1756 (in /workspaces/Nim/test6)
==14303==    by 0x115AA1: alignedAlloc0__system_u1927 (in /workspaces/Nim/test6)
==14303==    by 0x115DD7: nimNewObj (in /workspaces/Nim/test6)
==14303==    by 0x11F13E: newTable__OOZOOZhomeZcodespaceZOnimbleZpkgs50Zyaml4550O48O484553a55ef52aea5149ac52d5752f555453ea48ce5748485254dff53a56a5251ZyamlZdom_u4788 (in /workspaces/Nim/test6)
==14303==    by 0x17997A: constructChild__OOZOOZhomeZcodespaceZOnimbleZpkgs50Zyaml4550O48O484553a55ef52aea5149ac52d5752f555453ea48ce5748485254dff53a56a5251ZyamlZdom_u4781 (in /workspaces/Nim/test6)
==14303==    by 0x130E8F: construct__test54_u644 (in /workspaces/Nim/test6)
==14303==    by 0x1716C1: load__test54_u621 (in /workspaces/Nim/test6)
==14303==    by 0x180B03: myFunc__test54_u619 (in /workspaces/Nim/test6)
==14303==    by 0x180F49: NimMainModule (in /workspaces/Nim/test6)
==14303==    by 0x180E05: NimMainInner (in /workspaces/Nim/test6)

ringabout avatar Nov 16 '23 13:11 ringabout

I can reproduce the valgrind errors, also with Nim 2.0.2, but I am still not able to debug the Nim internals. Is there any progress on this?

theamarin avatar Jan 25 '24 14:01 theamarin

I get:


==1081== Invalid read of size 8
==1081==    at 0x113A54: system::markGray(ptr<system::RefHeader>, ptr<system::TNimTypeV2>, var<system::GcEnv>) (@[email protected]:1129)
==1081==    by 0x112575: system::collectCyclesBacon(var<system::GcEnv>, int) (@[email protected]:1427)
==1081==    by 0x112B70: system::collectCycles (@[email protected]:1529)
==1081==    by 0x113028: system::registerCycle(ptr<system::RefHeader>, ptr<system::TNimTypeV2>) (@[email protected]:1600)
==1081==    by 0x113113: system::rememberCycle(bool, ptr<system::RefHeader>, ptr<system::TNimTypeV2>) (@[email protected]:1631)
==1081==    by 0x18AAE2: nimDecRefIsLastCyclicStatic (@mtemp2.nim.c:379)
==1081==    by 0x18AAE2: YItem::eqdestroy_(seq<temp2::YItem>) (@mtemp2.nim.c:411)
==1081==    by 0x18CA85: ZItem::eqdestroy_(var<temp2::ZItemcolonObjectType_>) (@mtemp2.nim.c:731)
==1081==    by 0x18D194: ZItem::rttiDestroy(pointer) (@mtemp2.nim.c:777)
==1081==    by 0x112900: _ZN6system4freeE3ptrIN6system9RefHeaderEE3ptrIN6system10TNimTypeV2EE (@[email protected]:1386)
==1081==    by 0x112900: system::collectCyclesBacon(var<system::GcEnv>, int) (@[email protected]:1496)
==1081==    by 0x112B70: system::collectCycles (@[email protected]:1529)
==1081==    by 0x113028: system::registerCycle(ptr<system::RefHeader>, ptr<system::TNimTypeV2>) (@[email protected]:1600)
==1081==    by 0x113113: system::rememberCycle(bool, ptr<system::RefHeader>, ptr<system::TNimTypeV2>) (@[email protected]:1631)
==1081==  Address 0x4a97a10 is 0 bytes inside a block of size 96 free'd
==1081==    at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1081==    by 0x111663: system::deallocImpl(pointer) (@[email protected]:1337)
==1081==    by 0x111675: system::deallocSharedImpl(pointer) (@[email protected]:1340)
==1081==    by 0x111687: deallocShared (@[email protected]:1343)
==1081==    by 0x111DF0: alignedDealloc (@[email protected]:1348)
==1081==    by 0x1149B5: nimRawDispose (@[email protected]:1372)
==1081==    by 0x112921: _ZN6system4freeE3ptrIN6system9RefHeaderEE3ptrIN6system10TNimTypeV2EE (@[email protected]:1390)
==1081==    by 0x112921: system::collectCyclesBacon(var<system::GcEnv>, int) (@[email protected]:1496)
==1081==    by 0x112B70: system::collectCycles (@[email protected]:1529)
==1081==    by 0x113028: system::registerCycle(ptr<system::RefHeader>, ptr<system::TNimTypeV2>) (@[email protected]:1600)
==1081==    by 0x113113: system::rememberCycle(bool, ptr<system::RefHeader>, ptr<system::TNimTypeV2>) (@[email protected]:1631)
==1081==    by 0x18148A: nimDecRefIsLastCyclicStatic (@m..@s..@s..@s..@s..@s..@shome@[email protected]@[email protected]@[email protected]:721)
==1081==    by 0x18148A: dom::eqdestroy_(ref<dom::YamlNodeObj>) (@m..@s..@s..@s..@s..@s..@shome@[email protected]@[email protected]@[email protected]:1048)
==1081==    by 0x18629A: dom::constructChild(var<native::ConstructionContext>, var<ref<dom::YamlNodeObj> >) (@m..@s..@s..@s..@s..@s..@shome@[email protected]@[email protected]@[email protected]:2228)
==1081==  Block was alloc'd at
==1081==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1081==    by 0x11161B: system::allocImpl(range09223372036854775807) (@[email protected]:930)
==1081==    by 0x11162D: allocSharedImpl (@[email protected]:935)
==1081==    by 0x11666D: system::alignedAlloc(range09223372036854775807, range09223372036854775807) (@[email protected]:1696)
==1081==    by 0x11BEE2: nimNewObjUninit (@[email protected]:4239)
==1081==    by 0x18594E: dom::constructChild(var<native::ConstructionContext>, var<ref<dom::YamlNodeObj> >) (@m..@s..@s..@s..@s..@s..@shome@[email protected]@[email protected]@[email protected]:2048)
==1081==    by 0x136799: construct::construct(var<ref<stream::YamlStreamcolonObjectType_> >, var<ref<dom::YamlNodeObj> >) (@m..@s..@s..@s..@s..@s..@shome@[email protected]@[email protected]@[email protected]:1260)
==1081==    by 0x17CC73: load::load(string, var<ref<dom::YamlNodeObj> >) (@m..@s..@s..@s..@s..@s..@shome@[email protected]@[email protected]@[email protected]:531)
==1081==    by 0x18DB05: temp2::myFunc (@mtemp2.nim.c:947)
==1081==    by 0x18DE64: NimMainModule (@mtemp2.nim.c:1042)
==1081==    by 0x18DF1D: NimMainInner (@mtemp2.nim.c:1003)
==1081==    by 0x18DF34: NimMain (@mtemp2.nim.c:1014)

Araq avatar Mar 08 '24 15:03 Araq