This fatal is actually also happening in usual pike 8.1, so i guess its
unrelated to the new branch. The fatal happens during cleanup on exit,
should that not make sure that things are cleaned up in the correct
order? Or should the check be disabled on the final gc run when all
objects are freed?

arne

On 04/23/16 16:10, Arne Goedeke wrote:
> I have been able to fix a couple of bugs in the branch by now. There are
> some left, which I could use some help to understand why they occur. One
> is triggered by the DHT.test in the bittorrent library. When running
> that test in the 'faster_calls' branch with debug enabled, the following
> fatal occurs:
> 
> ------
> /home/el/code/rw/pike/src/gc.c:3864: GC fatal:
> GC destructed parent prematurely.
> **Block: 0x7f0d52594180  Type: object  Refs: 5
> **Got gc marker at 0x753e010: flags=0x20001e refs=4 weak=2 xrefs=0
> saved=4 frame=0x61b1d80 [data=0x7f0d52594180 rf_flags=0x95 prev=(nil)
> next=0x61b1d48 cycle_id=0x61b1d80 cycle_piece=0xffffffffffffffff
> link_top/last_cycle_piece=0xffffffffffffffff]
> **Parent identifier: 20
> **Program id: 66099
> **Object variables:
> ** rtt: mixed     name: state                 off:   56  value: 1
> ** rtt: mixed     name: ping_fails            off:   72  value: 0
> ** rtt: mixed     name: last_ping             off:   88  value: 1461419197
> ** rtt: mapping   name: pings_inflight        off:  104  value: mapping
> of size 0
> ** rtt: mixed     name: last_response         off:  112  value: 1461419362
> ** rtt: mixed     name: check_node_callout    off:  128  value: array of
> size 1
> **  === In inherit "Node", program 66100:
> **  rtt: string    name: node_id               off:   16  value:
> "O\366\355\207%n\277j4fI\323\231;\332|9Vu\30"
> **  rtt: string    name: address               off:   24  value: "127.0.0.1"
> **  rtt: string    name: token                 off:   32  value:
> "\370\373S\252""5\336\322\25\312[\205\201qR3h]\235z\311"
> **  rtt: mixed     name: port                  off:   40  value: 7010
> **Describing program 0x20fd070 of object:
> **Got gc marker at 0x76c8cb0: flags=0x0000e refs=15106 weak=0 xrefs=0
> saved=15106 frame=(nil)
> **Program id: 66099, flags: 308f, parent id: 66097
> **Location:
> /home/el/local/pike/8.1.4/lib/modules/Protocols.pmod/Bittorrent.pmod/DHT.pike:601
> **Object got a parent.
> *******************
> Pike was in GC stage 400 when this fatal occurred.
> Backtrace at time of fatal:
> 
> Subprocess died of signal SIGABRT.
> ------
> 
> So apparently the parent object was destructed before its child. Does
> anyone have any ideas what parts of the function call part in
> interpret.c might be incorrect? Is the PARENT_CLONE case wrong?
> 
> Thanks
> 
> Arne
> 

Reply via email to