Running without these commits, it runs forever. Running with these commits results in segmentation faults every few minutes to hours (this is in heavy threaded/lock code: pgsql driver). I cannot offer a stacktrace yet.
commit 4781e5e4fe034cc8b2acef468131d5dbc51ca21f Author: Henrik Grubbström (Grubba) grubba@grubba.org Date: Sun Jun 28 16:33:02 2020 +0200
Threads.Mutex: Added {try_,}shared_lock().
src/threads.c | 256 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 246 insertions(+), 10 deletions(-)
commit 35fa44331e70809a86a97a91bf80e27a38a6f35b Author: Henrik Grubbström (Grubba) grubba@grubba.org Date: Sat Jun 27 13:58:46 2020 +0200
Thread.Mutex: Keep track of pending locks.
Mutex locks are now taken in the same order as the calls to lock(). This prevents potential starvation.
src/threads.c | 181 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 137 insertions(+), 44 deletions(-)
commit d461910bac03f0fddf714dff8794e73988d07ea6 Author: Henrik Grubbström (Grubba) grubba@grubba.org Date: Fri Jun 26 12:34:34 2020 +0200
Thread.Mutex: The key pointer is now to the storage (and not the object).
src/threads.c | 69 ++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 30 deletions(-)
commit 37406b33d5670026537d4a9aca4776a88a94380b Author: Henrik Grubbström (Grubba) grubba@grubba.org Date: Thu Jun 25 15:37:42 2020 +0200
Build: Fixed some warnings.
src/post_modules/GSSAPI/gssapi.cmod | 1 + src/post_modules/Nettle/hogweed.cmod | 1 + src/post_modules/SDL/SDL.cmod | 2 +- src/post_modules/ZXID/zxid.cmod | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-)
commit ea9a8260156eca36ceb1f555fd1c04c9f1c71685 Author: Henrik Grubbström (Grubba) grubba@grubba.org Date: Wed Jun 24 18:16:52 2020 +0200
Thread.MutexKey: Some preparations for having different kinds of keys.
src/threads.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
This was when compiled with -g -O2 and no RTL_DEBUG. I have a coredump factory now.
[New LWP 9071] [New LWP 9048] [New LWP 5670] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007fd21f0a2be1 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 [Current thread is 1 (Thread 0x7fd21b9e3700 (LWP 9071))]
(gdb) where #0 0x00007fd21f0a2be1 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007fd21f0a3cf5 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x000055ebdbda1acd in really_free_mapping (m=0x55ebdd073790) at /home/srb/pike/src/mapping.c:70 #3 0x000055ebdbe2ccd8 in really_free_short_svalue_ptr (s=<optimized out>, type=<optimized out>) at /home/srb/pike/src/svalue.c:72 #4 0x000055ebdbdbb9a4 in destruct_object (o=0x55ebdcf97010, reason=reason@entry=DESTRUCT_EXPLICIT) at /home/srb/pike/src/object.c:1030 #5 0x000055ebdbe463e2 in f_destruct (args=1) at /home/srb/pike/src/builtin_functions.c:3747 #6 0x00007fd21d780162 in ?? () #7 0x0000000000000080 in ?? () #8 0x0000000000000000 in ?? ()
This was when compiled with -g -O2 and no RTL_DEBUG. I have a coredump factory now.
[New LWP 9071] [New LWP 9048] [New LWP 5670] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007fd21f0a2be1 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 [Current thread is 1 (Thread 0x7fd21b9e3700 (LWP 9071))]
(gdb) where #0 0x00007fd21f0a2be1 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007fd21f0a3cf5 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x000055ebdbda1acd in really_free_mapping (m=0x55ebdd073790) at /home/srb/pike/src/mapping.c:70 #3 0x000055ebdbe2ccd8 in really_free_short_svalue_ptr (s=<optimized out>, type=<optimized out>) at /home/srb/pike/src/svalue.c:72 #4 0x000055ebdbdbb9a4 in destruct_object (o=0x55ebdcf97010, reason=reason@entry=DESTRUCT_EXPLICIT) at /home/srb/pike/src/object.c:1030 #5 0x000055ebdbe463e2 in f_destruct (args=1) at /home/srb/pike/src/builtin_functions.c:3747 #6 0x00007fd21d780162 in ?? () #7 0x0000000000000080 in ?? () #8 0x0000000000000000 in ?? ()
The above doesn't look like it is directly related to the mutex changes. I guess it could be a reference counting issue or a double free.
What does "call gdb_backtraces()" output?
Can you identify the program in the variable "prog" in frame #4? Looking at the strings in "prog->strings" may help.
Have you tried running under valgrind?
/grubba
Henrik Grubbstr?m (Lysator) @ Pike (-) developers forum wrote:
The above doesn't look like it is directly related to the mutex changes. I guess it could be a reference counting issue or a double free.
What does "call gdb_backtraces()" output?
It's already a "cold" core. So that won't work.
Have you tried running under valgrind?
I'll see what I can do.
In the meantime, I have two things: a. Using gcc-10 we trigger a compilerbug in pikes_types.cmod.. b. Using gcc-9 it works, and running *with* RTL_DEBUG results in this:
New LWP 348] [New LWP 336] [New LWP 32724] [New LWP 31854] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x000056218e874ceb in io_actually_trigger_output (io=io@entry=0x562190de5d50) at /var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:458 458 /var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod: No such file or directory. [Current thread is 1 (Thread 0x7fd748888700 (LWP 348))] (gdb) where #0 0x000056218e874ceb in io_actually_trigger_output (io=io@entry=0x562190de5d50) at /var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:458 #1 0x000056218e874f74 in io_trigger_output (io=0x562190de5d50) at /home/srb/pike/src/modules/_Stdio/buffer.h:73 #2 io_append (io=io@entry=0x562190de5d50, p=<optimized out>, bytes=<optimized out>) at /var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:526 #3 0x000056218e875417 in io_append_svalue (io=io@entry=0x562190de5d50, p=<optimized out>, p=<optimized out>) at /var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:844 #4 0x000056218e87597e in f_Buffer_add (args=1) at /var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:1228 #5 0x000056218e67d3f9 in lower_mega_apply (args=args@entry=1, o=o@entry=0x562190f44540, fun=11) at /home/srb/pike/src/interpret.c:2506 #6 0x000056218e67ea82 in jump_opcode_F_CALL_OTHER (arg1=<optimized out>) at /var/src/roxen/81pike/src/interpret_functions.h:2424 #7 0x00007fd7491ff7c5 in ?? () #8 0x00000000000002b0 in ?? () #9 0x000056218e8aa588 in ?? () #10 0x00007fd7491f638c in ?? () #11 0x0000000000000000 in ?? ()
Compiled with gcc-9 -O2 -g with RTL_DEBUG and with valgrind support. The RTL_DEBUG results in this: /usr/local/pike/8.1.13/lib/modules/SSL.pmod/Connection.pike.o:-: Warning: Decode failed: Decode error: Got unfinished program <279> after decode: program
Running it under valgrind is a bit strange (e.g. it does not load the Stdio.FILE module; I don't understand why). Maybe the machine code options are not compatible with valgrind, this is what I use: --with-double-precision --with-long-int \ --disable-noopty-retry \ --with-poll \ --with-machine-code \ --without-portable-bytecode \
Running under valgrind results in this: ==16131== Memcheck, a memory error detector ==16131== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==16131== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info ==16131== Command: /usr/local/bin/pike ./vspike -h ==16131== ==16131== Syscall param epoll_ctl(event) points to uninitialised byte(s) ==16131== at 0x4B72CCA: epoll_ctl (syscall-template.S:78) ==16131== by 0x1890CF: POLL_DEVICE_SET_EVENTS (backend.cmod:2889) ==16131== by 0x1890CF: POLL_DEVICE_SET_EVENTS (backend.cmod:2868) ==16131== by 0x189FFE: pdb_update_fd_set (backend.cmod:3602) ==16131== by 0x189FFE: pdb_update_fd_set (backend.cmod:3582) ==16131== by 0x189019: f_Backend_create (backend.cmod:2628) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15F5C8: mega_apply_low (interpret.c:3048) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x214D65: debug_clone_object (object.c:417) ==16131== by 0x18BC0B: init_backend (backend.cmod:6039) ==16131== by 0x30FC8C: init_builtin_modules (pike_modules.c:78) ==16131== by 0x30FEEB: init_modules (pike_modules.c:451) ==16131== by 0x1F944F: init_pike_runtime (pike_embed.c:320) ==16131== Address 0x1ffefffd8c is on thread 1's stack ==16131== in frame #1, created by POLL_DEVICE_SET_EVENTS (backend.cmod:2870) ==16131== ==16131== Syscall param epoll_ctl(event) points to uninitialised byte(s) ==16131== at 0x4B72CCA: epoll_ctl (syscall-template.S:78) ==16131== by 0x18914E: POLL_DEVICE_SET_EVENTS (backend.cmod:2895) ==16131== by 0x18914E: POLL_DEVICE_SET_EVENTS (backend.cmod:2868) ==16131== by 0x189FFE: pdb_update_fd_set (backend.cmod:3602) ==16131== by 0x189FFE: pdb_update_fd_set (backend.cmod:3582) ==16131== by 0x189019: f_Backend_create (backend.cmod:2628) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15F5C8: mega_apply_low (interpret.c:3048) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x214D65: debug_clone_object (object.c:417) ==16131== by 0x18BC0B: init_backend (backend.cmod:6039) ==16131== by 0x30FC8C: init_builtin_modules (pike_modules.c:78) ==16131== by 0x30FEEB: init_modules (pike_modules.c:451) ==16131== by 0x1F944F: init_pike_runtime (pike_embed.c:320) ==16131== Address 0x1ffefffd8c is on thread 1's stack ==16131== in frame #1, created by POLL_DEVICE_SET_EVENTS (backend.cmod:2870) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x305A01: _asm_peep_11 (peep_engine.c:759) ==16131== by 0x30B23D: low_asm_opt (peep_engine.c:5837) ==16131== by 0x30E9DC: asm_opt (peep.c:1159) ==16131== by 0x30E9DC: assemble (peep.c:441) ==16131== by 0x190835: decode_portable_bytecode (encode.c:3048) ==16131== by 0x190835: decode_value2_ (encode.c:4368) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x218A19: get_master (object.c:668) ==16131== by 0x1F9586: load_pike_master (pike_embed.c:370) ==16131== by 0x12914B: main (main.c:666) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x68152C9: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x214979: call_pike_initializers (object.c:343) ==16131== by 0x218656: get_master (object.c:731) ==16131== by 0x1F9586: load_pike_master (pike_embed.c:370) ==16131== by 0x12914B: main (main.c:666) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x682F9FB: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x218656: get_master (object.c:731) ==16131== by 0x1F9586: load_pike_master (pike_embed.c:370) ==16131== by 0x12914B: main (main.c:666) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57DC885: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x214FE1: parent_clone_object (object.c:468) ==16131== by 0x158E68: low_mega_apply (apply_low.h:238) ==16131== by 0x159FED: jump_opcode_F_CALL_FUNCTION (interpret_functions.h:2422) ==16131== by 0x57E3802: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x218656: get_master (object.c:731) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x682F9FB: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x211AD8: object_lower_set_index (object.c:1632) ==16131== by 0x218478: object_low_set_index (object.c:1828) ==16131== by 0x218682: get_master (object.c:735) ==16131== by 0x1F9586: load_pike_master (pike_embed.c:370) ==16131== by 0x12914B: main (main.c:666) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57E4E64: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14EEDB: opcode_F_LOCAL_INDEX (interpret_functions.h:2046) ==16131== by 0x6816CC2: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x129179: main (main.c:671) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x129179: main (main.c:671) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x682823F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x228C2C: o_cast (operators.c:679) ==16131== by 0x22A388: f_cast (operators.c:923) ==16131== by 0x683D3B1: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x129179: main (main.c:671) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57D1920: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x166BDD: f_CPP_init_pike_cpp (cpp.cmod:5582) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15BFC9: jump_opcode_F_CALL_OTHER_AND_POP (interpret_functions.h:2482) ==16131== by 0x681B52A: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x228C2C: o_cast (operators.c:679) ==16131== by 0x22A388: f_cast (operators.c:923) ==16131== by 0x683D3B1: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57D1920: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x16C5AB: cpp_constant (cpp.cmod:1641) ==16131== by 0x16DBD1: calcC (cpp.cmod:2992) ==16131== by 0x16DBD1: calcB (cpp.cmod:3039) ==16131== by 0x16DD4E: calcA (cpp.cmod:3050) ==16131== by 0x16DEE1: calc9 (cpp.cmod:3092) ==16131== by 0x16DFD4: calc8 (cpp.cmod:3126) ==16131== by 0x16E0D3: calc7b (cpp.cmod:3160) ==16131== by 0x16E30C: calc7 (cpp.cmod:3210) ==16131== by 0x16E46B: calc6 (cpp.cmod:3243) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57DE531: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14EEDB: opcode_F_LOCAL_INDEX (interpret_functions.h:2046) ==16131== by 0x6816CC2: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x682823F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14EEDB: opcode_F_LOCAL_INDEX (interpret_functions.h:2046) ==16131== by 0x6816CC2: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x16C5AB: cpp_constant (cpp.cmod:1641) ==16131== by 0x16DBD1: calcC (cpp.cmod:2992) ==16131== by 0x16DBD1: calcB (cpp.cmod:3039) ==16131== by 0x16DD4E: calcA (cpp.cmod:3050) ==16131== by 0x16DEE1: calc9 (cpp.cmod:3092) ==16131== by 0x16DFD4: calc8 (cpp.cmod:3126) ==16131== by 0x16E0D3: calc7b (cpp.cmod:3160) ==16131== by 0x16E30C: calc7 (cpp.cmod:3210) ==16131== by 0x16E46B: calc6 (cpp.cmod:3243) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57DE531: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== by 0x57DE918: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x682823F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== by 0x57DE918: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57CC8E0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x23B74D: run_init2 (pike_compiler.cmod:998) ==16131== by 0x23C05E: run_pass1 (pike_compiler.cmod:1110) ==16131== by 0x23C05E: f_compilation_compile (pike_compiler.cmod:1744) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15BA81: jump_opcode_F_CALL_OTHER (interpret_functions.h:2424) ==16131== by 0x57D10E7: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x158B92: low_mega_apply (apply_low.h:225) ==16131== by 0x159FED: jump_opcode_F_CALL_FUNCTION (interpret_functions.h:2422) ==16131== by 0x57CCA79: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x23B74D: run_init2 (pike_compiler.cmod:998) ==16131== by 0x23C05E: run_pass1 (pike_compiler.cmod:1110) ==16131== by 0x23C05E: f_compilation_compile (pike_compiler.cmod:1744) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57ED13B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18E9F7: decode_value2_ (encode.c:3710) ==16131== by 0x195147: low_decode_type (encode.c:2860) ==16131== by 0x1951E4: low_decode_type (encode.c:2744) ==16131== by 0x18D9FB: decode_value2_ (encode.c:3329) ==16131== by 0x18F4CC: decode_value2_ (encode.c:4203) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57ED13B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18EE53: decode_value2_ (encode.c:3470) ==16131== by 0x1920BA: decode_value2_ (encode.c:4798) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== by 0x57DE918: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18EB45: decode_value2_ (encode.c:3631) ==16131== by 0x1920BA: decode_value2_ (encode.c:4798) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== by 0x57DE918: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57ED13B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18EB45: decode_value2_ (encode.c:3631) ==16131== by 0x1920BA: decode_value2_ (encode.c:4798) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== by 0x57DE918: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x1610D4: low_unsafe_apply_handler (interpret.c:3349) ==16131== by 0x1610D4: low_unsafe_apply_handler (interpret.c:3330) ==16131== by 0x238DE1: f_compilation_env_resolv (pike_compiler.cmod:653) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15F5C8: mega_apply_low (interpret.c:3048) ==16131== by 0x162852: apply_external (interpret.c:3539) ==16131== by 0x2343A8: f_compilation_resolv (pike_compiler.cmod:1841) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15F5C8: mega_apply_low (interpret.c:3048) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57E30B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x214FE1: parent_clone_object (object.c:468) ==16131== by 0x15A6D1: lower_mega_apply (interpret.c:2534) ==16131== by 0x15AA3D: jump_opcode_F_CALL_LFUN_N (interpret_functions.h:2329) ==16131== by 0x6831D7F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x12A0DB: call_handle_import (language.yacc:5461) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== by 0x57DE918: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== /usr/local/pike/8.1.13/lib/modules/System.pmod/module.pmod.o:-: Warning: Decode failed: Error while decoding program: Bad number of identifiers in inherit (196 != 195). ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18E9F7: decode_value2_ (encode.c:3710) ==16131== by 0x195147: low_decode_type (encode.c:2860) ==16131== by 0x194FC3: low_decode_type (encode.c:2851) ==16131== by 0x1950DE: low_decode_type (encode.c:2756) ==16131== by 0x194D4C: low_decode_type (encode.c:2797) ==16131== by 0x18D9FB: decode_value2_ (encode.c:3329) ==16131== by 0x18E7A9: decode_value2_ (encode.c:4111) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x20853E: mov_imm_mem (amd64.c:652) ==16131== by 0x20FD8D: ins_f_byte_with_arg (amd64.c:3994) ==16131== by 0x30F5C0: assemble (peep.c:709) ==16131== by 0x1A7470: do_code_block (docode.c:3250) ==16131== by 0x2DA686: dooptcode (las.cmod:4873) ==16131== by 0x13409B: yyparse (language.yacc:1064) ==16131== by 0x233402: do_yyparse (pike_compiler.cmod:370) ==16131== by 0x23BC94: run_pass2.part.0 (pike_compiler.cmod:1241) ==16131== by 0x23C352: run_pass2 (pike_compiler.cmod:1221) ==16131== by 0x23C352: f_compilation_compile (pike_compiler.cmod:1768) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15BA81: jump_opcode_F_CALL_OTHER (interpret_functions.h:2424) ==16131== by 0x57D10E7: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18EE53: decode_value2_ (encode.c:3470) ==16131== by 0x1920BA: decode_value2_ (encode.c:4798) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x742AA6F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x214979: call_pike_initializers (object.c:343) ==16131== by 0x214FE1: parent_clone_object (object.c:468) ==16131== by 0x15A6D1: lower_mega_apply (interpret.c:2534) ==16131== by 0x15AEA2: jump_opcode_F_MARK_CALL_LFUN (interpret_functions.h:2376) ==16131== by 0x742F933: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7442D79: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x74432A1: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7460889: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7457A42: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x74512D8: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7452405: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7457229: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7452D44: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7452FAF: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7454939: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745392F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7454CD2: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745516F: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7456851: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x744CCB9: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7455864: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7455669: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x746A9D6: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745DC6C: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745E636: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745EDBA: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745FC20: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x745F99C: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7460178: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6820138: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x2C26D3: describe_svalue (svalue.c:1759) ==16131== by 0x25F686: low_pike_sprintf (sprintf.c:1790) ==16131== by 0x261A0F: low_f_sprintf (sprintf.c:1992) ==16131== by 0x261DE2: f_sprintf (sprintf.c:2010) ==16131== by 0x746D36B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x214979: call_pike_initializers (object.c:343) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x74440AA: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F851: opcode_F_STRING_INDEX (interpret_functions.h:2089) ==16131== by 0x6FCE673: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x14F153: opcode_F_GLOBAL_LOCAL_INDEX (interpret_functions.h:2056) ==16131== by 0x57DE9B0: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7999494: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x214979: call_pike_initializers (object.c:343) ==16131== by 0x23AB6B: run_cleanup (pike_compiler.cmod:1354) ==16131== by 0x23C35C: f_compilation_compile (pike_compiler.cmod:1770) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15BA81: jump_opcode_F_CALL_OTHER (interpret_functions.h:2424) ==16131== by 0x57D10E7: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2BDC7F: complex_svalue_is_true (svalue.c:580) ==16131== /usr/local/pike/8.1.13/lib/modules/Random.pmod/Hardware.pike.o:-: Warning: Decode failed: Cannot find "hw_random" in System. /usr/local/pike/8.1.13/lib/modules/Random.pmod/Fast.pike.o:-: Warning: Decode failed: Cannot resolve "Random.Hardware". ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6FB93A6: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F24D: mega_apply (interpret.c:3023) ==16131== by 0x161E8E: apply_svalue (interpret.c:3495) ==16131== by 0x2FC53E: f_map (builtin_functions.c:9246) ==16131== by 0x6FC7CCE: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x2BDAB4: hash_svalue (svalue.c:462) ==16131== by 0x1FBA62: low_mapping_insert (mapping.c:956) ==16131== by 0x201885: f_aggregate_mapping (mapping.c:2453) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7EA0848: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x192227: decode_value2_ (encode.c:4836) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57CD72E: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x2384CA: va_yyreport (pike_compiler.cmod:2573) ==16131== by 0x2392F1: yytype_report (pike_compiler.cmod:2646) ==16131== by 0x2CD32D: fix_foreach_type (las.cmod:3292) ==16131== by 0x2D0F82: optimize (treeopt.h:2500) ==16131== by 0x2DA0EB: optimize_node (las.cmod:4433) ==16131== by 0x2DA0EB: optimize_node (las.cmod:4427) ==16131== by 0x2DA16D: dooptcode (las.cmod:4762) ==16131== by 0x13409B: yyparse (language.yacc:1064) ==16131== by 0x233402: do_yyparse (pike_compiler.cmod:370) ==16131== /usr/local/pike/8.1.13/lib/modules/SSL.pmod/Connection.pike.o:-: Warning: Decode failed: Decode error: Got unfinished program <279> after decode: program ==16131== Invalid read of size 8 ==16131== at 0x237257: free_supporter (pike_compiler.cmod:293) ==16131== by 0x237443: free_compilation (pike_compiler.cmod:915) ==16131== by 0x237443: compilation_event_handler (pike_compiler.cmod:1441) ==16131== by 0x21650B: destruct_object (object.c:992) ==16131== by 0x216D7F: low_destruct_objects_to_destruct (object.c:1134) ==16131== by 0x216D7F: low_destruct_objects_to_destruct (object.c:1092) ==16131== by 0x216E08: destruct_objects_to_destruct_cb (object.c:1144) ==16131== by 0x15A395: lower_mega_apply (interpret.c:2473) ==16131== by 0x15F5C8: mega_apply_low (interpret.c:3048) ==16131== by 0x18EE53: decode_value2_ (encode.c:3470) ==16131== by 0x1920BA: decode_value2_ (encode.c:4798) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== Address 0x5723e38 is 40 bytes inside a block of size 512 free'd ==16131== at 0x48379AB: free (vg_replace_malloc.c:538) ==16131== by 0x216105: schedule_really_free_object (object.c:1246) ==16131== by 0x216D94: low_destruct_objects_to_destruct (object.c:1135) ==16131== by 0x216D94: low_destruct_objects_to_destruct (object.c:1092) ==16131== by 0x216E08: destruct_objects_to_destruct_cb (object.c:1144) ==16131== by 0x15A395: lower_mega_apply (interpret.c:2473) ==16131== by 0x15F5C8: mega_apply_low (interpret.c:3048) ==16131== by 0x18EE53: decode_value2_ (encode.c:3470) ==16131== by 0x1920BA: decode_value2_ (encode.c:4798) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== Block was alloc'd at ==16131== at 0x4838B65: calloc (vg_replace_malloc.c:760) ==16131== by 0x205A2A: debug_xcalloc (pike_memory.c:337) ==16131== by 0x21449A: low_clone (object.c:144) ==16131== by 0x214F8B: parent_clone_object (object.c:454) ==16131== by 0x237963: enter_compiler (pike_compiler.cmod:2459) ==16131== by 0x18DCC5: decode_value2_ (encode.c:3911) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x7F62308: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x2148F1: call_pike_initializers (object.c:350) ==16131== by 0x23AB6B: run_cleanup (pike_compiler.cmod:1354) ==16131== by 0x23C35C: f_compilation_compile (pike_compiler.cmod:1770) ==16131== by 0x15A3F8: lower_mega_apply (interpret.c:2506) ==16131== by 0x15BA81: jump_opcode_F_CALL_OTHER (interpret_functions.h:2424) ==16131== by 0x57D10E7: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x57ECAFD: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x18EE53: decode_value2_ (encode.c:3470) ==16131== by 0x18F8D7: decode_value2_ (encode.c:4649) ==16131== by 0x194220: low_do_decode (encode.c:4996) ==16131== by 0x19CD3D: my_decode (encode.c:5124) ==16131== by 0x19CD3D: f_decode_value (encode.c:5511) ==16131== by 0x682778B: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x218070: object_index_no_free (object.c:1599) ==16131== by 0x57E456B: ??? ==16131== ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x234FA7: f_reporter_report (pike_compiler.cmod:483) ==16131== by 0x158B92: low_mega_apply (apply_low.h:225) ==16131== by 0x15A08F: jump_opcode_F_CALL_FUNCTION_AND_POP (interpret_functions.h:2422) ==16131== by 0x57CD943: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x163436: safe_apply_low2 (interpret.c:3301) ==16131== by 0x2384CA: va_yyreport (pike_compiler.cmod:2573) ==16131== by 0x238BE6: my_yyerror (pike_compiler.cmod:2614) ==16131== /usr/local/pike/8.1.13/lib/modules/Process.pmod:970:Index 'FILE' not present in module Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:970:Indexed module was: Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:970:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Process.pmod:974:Index 'FILE' not present in module Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:974:Indexed module was: Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:974:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Index 'FILE' not present in module Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Indexed module was: Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Index 'FILE' not present in module Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Indexed module was: Stdio. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Attempt to call a non function value `() (function call). /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Expected: function. /usr/local/pike/8.1.13/lib/modules/Process.pmod:976:Got : zero. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1047:Attempt to call a non function value fork. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1047:Expected: function. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1047:Got : zero. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1069:Too many arguments to exece (expected 0 arguments). /usr/local/pike/8.1.13/lib/modules/Process.pmod:1069:Got : string. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1071:Too many arguments to exece (expected 0 arguments). /usr/local/pike/8.1.13/lib/modules/Process.pmod:1071:Got : string. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1236:Must return a value for a non-void function. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1236:Expected: mixed. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1236:Got : void. /usr/local/pike/8.1.13/lib/modules/Process.pmod:1253:Placeholder already has storage! /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:44:Undefined identifier NetUtils. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:44:Too many arguments to `() (function call) (expected 0 arguments). /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:44:Got : string. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:67:Failed to evaluate constant expression. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:67:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:82:Failed to evaluate constant expression. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:82:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:89:Failed to evaluate constant expression. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:89:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:96:Failed to evaluate constant expression. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:96:Illegal program identifier: 0. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:148:Undefined identifier NetUtils. /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:148:Too many arguments to `() (function call) (expected 0 arguments). /usr/local/pike/8.1.13/lib/modules/Val.pmod/Inet.pike:148:Got : int. vspike:786:Error looking up 'Inet' in module Val. vspike:786:Compilation failed. ==16131== Conditional jump or move depends on uninitialised value(s) ==16131== at 0x6818841: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F24D: mega_apply (interpret.c:3023) ==16131== by 0x161E8E: apply_svalue (interpret.c:3495) ==16131== by 0x2E60FD: f_exit (builtin_functions.c:3462) ==16131== by 0x683DCAB: ??? ==16131== by 0x138869: eval_instruction_low (interpret.c:1955) ==16131== by 0x138869: eval_instruction (interpret.c:1907) ==16131== by 0x15F5E5: mega_apply_low (interpret.c:3050) ==16131== by 0x129179: main (main.c:671) ==16131== Pike: Failed to compile script. ==16131== ==16131== HEAP SUMMARY: ==16131== in use at exit: 13,448,779 bytes in 11,253 blocks ==16131== total heap usage: 182,088 allocs, 170,835 frees, 266,178,171 bytes allocated ==16131== ==16131== LEAK SUMMARY: ==16131== definitely lost: 0 bytes in 0 blocks ==16131== indirectly lost: 0 bytes in 0 blocks ==16131== possibly lost: 0 bytes in 0 blocks ==16131== still reachable: 13,448,779 bytes in 11,253 blocks ==16131== suppressed: 0 bytes in 0 blocks ==16131== Rerun with --leak-check=full to see details of leaked memory ==16131== ==16131== Use --track-origins=yes to see where uninitialised values come from ==16131== For lists of detected and suppressed errors, rerun with: -s ==16131== ERROR SUMMARY: 32917 errors from 67 contexts (suppressed: 0 from 0)
Recompiled with gcc-9 -O2 -g with RTL_DEBUG with valgrind support.
This time with: --with-double-precision --with-long-int \ --disable-noopty-retry \ --with-poll \ --without-machine-code \ --with-portable-bytecode \
The program now delivers the right output, but the valgrind report(s) are not completely spotless, so it seems: $ ./vspike -h ==10728== Memcheck, a memory error detector ==10728== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==10728== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info ==10728== Command: /usr/local/bin/pike ./vspike -h ==10728== ==10728== Conditional jump or move depends on uninitialised value(s) ==10728== at 0x375731: _asm_peep_11 (peep_engine.c:759) ==10728== by 0x37AF6D: low_asm_opt (peep_engine.c:5837) ==10728== by 0x37E73C: asm_opt (peep.c:1159) ==10728== by 0x37E73C: assemble (peep.c:441) ==10728== by 0x1B6EBE: decode_portable_bytecode (encode.c:3048) ==10728== by 0x1B6EBE: decode_value2_ (encode.c:4368) ==10728== by 0x1BB7B2: low_do_decode (encode.c:4996) ==10728== by 0x1C670A: my_decode (encode.c:5124) ==10728== by 0x1C670A: f_decode_value (encode.c:5511) ==10728== by 0x24C8D1: get_master (object.c:668) ==10728== by 0x231256: load_pike_master (pike_embed.c:370) ==10728== by 0x126253: main (main.c:666) ==10728== Usage: spike [-dvb] [-a authtoken] [-r pidfile] [-p [host:]port] sitesfile ... -a Set authtoken (also environment AUTHTOKEN) -c Specify alternate to config.pmod -d Increase debuglevel (forces foreground) -h Help about usage. -k Kill running daemon -l Syslog facility number -n Name this daemon -b Inhibit spawning bots -r Specify alternate PID file path -p Default TCP listenport -v Verbose ==10728== Invalid read of size 2 ==10728== at 0x1E2582: debug_gc_free_extra_ref (gc.c:2125) ==10728== by 0x1E3D74: do_gc.part.0 (gc.c:3840) ==10728== by 0x380BEF: exit_modules (pike_modules.c:494) ==10728== by 0x230D1D: pike_do_exit (pike_embed.c:438) ==10728== by 0x125C4B: main (main.c:682) ==10728== Address 0x6e03bb4 is 29,636 bytes inside a recently re-allocated block of size 81,936 alloc'd ==10728== at 0x483677F: malloc (vg_replace_malloc.c:307) ==10728== by 0x240DAD: debug_xalloc (pike_memory.c:306) ==10728== by 0x240054: ba_alloc_page (block_allocator.c:103) ==10728== by 0x240054: ba_low_alloc (block_allocator.c:248) ==10728== by 0x240054: ba_alloc (block_allocator.c:259) ==10728== by 0x246EDF: alloc_object (object.c:101) ==10728== by 0x246EDF: low_clone (object.c:135) ==10728== by 0x247CEB: parent_clone_object (object.c:454) ==10728== by 0x13CBE8: low_mega_apply (apply_low.h:238) ==10728== by 0x141F7E: eval_instruction_without_debug (interpret_functions.h:2422) ==10728== by 0x17D4D4: eval_instruction (interpret.c:2012) ==10728== by 0x17D4D4: mega_apply_low (interpret.c:3050) ==10728== by 0x247579: call_pike_initializers (object.c:343) ==10728== by 0x27B970: run_cleanup (pike_compiler.cmod:1354) ==10728== by 0x27D9BA: f_compilation_compile (pike_compiler.cmod:1770) ==10728== by 0x13D9B1: lower_mega_apply (interpret.c:2506) ==10728== ==10728== Invalid read of size 4 ==10728== at 0x1E2738: debug_gc_free_extra_ref (gc.c:2137) ==10728== by 0x1E3D74: do_gc.part.0 (gc.c:3840) ==10728== by 0x380BEF: exit_modules (pike_modules.c:494) ==10728== by 0x230D1D: pike_do_exit (pike_embed.c:438) ==10728== by 0x125C4B: main (main.c:682) ==10728== Address 0x6e03bc0 is 29,648 bytes inside a recently re-allocated block of size 81,936 alloc'd ==10728== at 0x483677F: malloc (vg_replace_malloc.c:307) ==10728== by 0x240DAD: debug_xalloc (pike_memory.c:306) ==10728== by 0x240054: ba_alloc_page (block_allocator.c:103) ==10728== by 0x240054: ba_low_alloc (block_allocator.c:248) ==10728== by 0x240054: ba_alloc (block_allocator.c:259) ==10728== by 0x246EDF: alloc_object (object.c:101) ==10728== by 0x246EDF: low_clone (object.c:135) ==10728== by 0x247CEB: parent_clone_object (object.c:454) ==10728== by 0x13CBE8: low_mega_apply (apply_low.h:238) ==10728== by 0x141F7E: eval_instruction_without_debug (interpret_functions.h:2422) ==10728== by 0x17D4D4: eval_instruction (interpret.c:2012) ==10728== by 0x17D4D4: mega_apply_low (interpret.c:3050) ==10728== by 0x247579: call_pike_initializers (object.c:343) ==10728== by 0x27B970: run_cleanup (pike_compiler.cmod:1354) ==10728== by 0x27D9BA: f_compilation_compile (pike_compiler.cmod:1770) ==10728== by 0x13D9B1: lower_mega_apply (interpret.c:2506) ==10728== ==10728== Invalid write of size 4 ==10728== at 0x1E265F: debug_gc_free_extra_ref (gc.c:2144) ==10728== by 0x1E3D74: do_gc.part.0 (gc.c:3840) ==10728== by 0x380BEF: exit_modules (pike_modules.c:494) ==10728== by 0x230D1D: pike_do_exit (pike_embed.c:438) ==10728== by 0x125C4B: main (main.c:682) ==10728== Address 0x6e03bc0 is 29,648 bytes inside a recently re-allocated block of size 81,936 alloc'd ==10728== at 0x483677F: malloc (vg_replace_malloc.c:307) ==10728== by 0x240DAD: debug_xalloc (pike_memory.c:306) ==10728== by 0x240054: ba_alloc_page (block_allocator.c:103) ==10728== by 0x240054: ba_low_alloc (block_allocator.c:248) ==10728== by 0x240054: ba_alloc (block_allocator.c:259) ==10728== by 0x246EDF: alloc_object (object.c:101) ==10728== by 0x246EDF: low_clone (object.c:135) ==10728== by 0x247CEB: parent_clone_object (object.c:454) ==10728== by 0x13CBE8: low_mega_apply (apply_low.h:238) ==10728== by 0x141F7E: eval_instruction_without_debug (interpret_functions.h:2422) ==10728== by 0x17D4D4: eval_instruction (interpret.c:2012) ==10728== by 0x17D4D4: mega_apply_low (interpret.c:3050) ==10728== by 0x247579: call_pike_initializers (object.c:343) ==10728== by 0x27B970: run_cleanup (pike_compiler.cmod:1354) ==10728== by 0x27D9BA: f_compilation_compile (pike_compiler.cmod:1770) ==10728== by 0x13D9B1: lower_mega_apply (interpret.c:2506) ==10728== Leak(s) found at exit: Array at 0x56efca0 got 1 unaccounted refs (and 0 accounted): ({ /* 2 elements */ 12, 2147487744 }) Program at 0x4e7fdd0 got 1 unaccounted refs (and 7 accounted): program(var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:77) Object at 0x6e018f0 got 1 unaccounted refs (and 2 accounted): object(/usr/local/pike/8.1.13/lib/modules/Standards.pmod/X509.pmod) Object at 0x4c970a0 got 1 unaccounted refs (and 10 accounted): 0 (destructed) Program for destructed object: program(/usr/local/pike/8.1.13/lib/master.pike) Type at 0x4f6ff48 got 1 unaccounted refs (and 1 accounted): function({ Buffer = object(implements program(var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:77)) }, int(..) : string(0..: 8bit)) Type at 0x4f70188 got 1 unaccounted refs (and 1 accounted): function({ Buffer = object(implements program(var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:77)) } : { Buffer = object(implements program(var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:77)) }) Type at 0x4f684f0 got 1 unaccounted refs (and 1 accounted): { TBSCertificate = object(implements program(var/src/roxen/81pike/src/pike_compiler.cmod:3232)) } Type at 0x4c8c310 got 1 unaccounted refs (and 931 accounted): int(..) Type at 0x4f6ffd8 got 2 unaccounted refs (and 2 accounted): function({ Buffer = object(implements program(var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:77)) } : void) Type at 0x4c8c748 got 1 unaccounted refs (and 280 accounted): function Type at 0x4e38d48 got 1 unaccounted refs (and 16 accounted): function(string(0..: 8bit) : void) Type at 0x4c8cce8 got 1 unaccounted refs (and 191 accounted): string(0..: 8bit) Type at 0x4f54d98 got 1 unaccounted refs (and 3 accounted): function(void | string(0..: 8bit) : void) Type at 0x4f67ba8 got 1 unaccounted refs (and 0 accounted): array(0..: { TBSCertificate = object(implements program(var/src/roxen/81pike/src/pike_compiler.cmod:3232)) }) Type at 0x4c8c430 got 1 unaccounted refs (and 721 accounted): string(0..: ..) Type at 0x4d8c040 got 1 unaccounted refs (and 30 accounted): array(0..: int(..)) Type at 0x4f4dbb0 got 1 unaccounted refs (and 20 accounted): { Buffer = object(implements program(var/src/roxen/81pike/src/modules/_Stdio/buffer.cmod:77)) } ==10728== LEAK SUMMARY: ==10728== definitely lost: 0 bytes in 0 blocks ==10728== indirectly lost: 0 bytes in 0 blocks ==10728== possibly lost: 0 bytes in 0 blocks ==10728== still reachable: 8,182,771 bytes in 50,260 blocks ==10728== suppressed: 0 bytes in 0 blocks ==10728== Reachable blocks (those to which a pointer was found) are not shown. ==10728== To see them, rerun with: --leak-check=full --show-leak-kinds=all ==10728== Free of leaked array 0x56efca0 from /home/srb/pike/src/pike_modules.c:311, 0 refs remaining Free of leaked program 0x4e7fdd0 from /home/srb/pike/src/pike_modules.c:314, 7 refs remaining Free of leaked object 0x6e018f0 from /home/srb/pike/src/pike_modules.c:315, 2 refs remaining Free of leaked object 0x4c970a0 from /home/srb/pike/src/pike_modules.c:315, 10 refs remaining Free of leaked type 0x4f6ff48 from /home/srb/pike/src/pike_modules.c:320, 1 refs remaining Free of leaked type 0x4f70188 from /home/srb/pike/src/pike_modules.c:320, 1 refs remaining Free of leaked type 0x4f684f0 from /home/srb/pike/src/pike_modules.c:320, 1 refs remaining Free of leaked type 0x4c8c310 from /home/srb/pike/src/pike_modules.c:320, 931 refs remaining Free of leaked type 0x4f6ffd8 from /home/srb/pike/src/pike_modules.c:320, 3 refs remaining Free of leaked type 0x4f6ffd8 from /home/srb/pike/src/pike_modules.c:320, 2 refs remaining Free of leaked type 0x4c8c748 from /home/srb/pike/src/pike_modules.c:320, 280 refs remaining Free of leaked type 0x4e38d48 from /home/srb/pike/src/pike_modules.c:320, 16 refs remaining Free of leaked type 0x4c8cce8 from /home/srb/pike/src/pike_modules.c:320, 191 refs remaining Free of leaked type 0x4f54d98 from /home/srb/pike/src/pike_modules.c:320, 3 refs remaining Free of leaked type 0x4f67ba8 from /home/srb/pike/src/pike_modules.c:320, 0 refs remaining Free of leaked type 0x4f684f0 from /home/srb/pike/src/pike_types.cmod:343, 0 refs remaining Free of leaked type 0x4c8c430 from /home/srb/pike/src/pike_modules.c:320, 721 refs remaining Free of leaked type 0x4d8c040 from /home/srb/pike/src/pike_modules.c:320, 30 refs remaining Free of leaked type 0x4f4dbb0 from /home/srb/pike/src/pike_modules.c:320, 20 refs remaining Strings left: 11 (263584 bytes) (zapped) 0x0x4eeb6a8: 1 refs, len=10, size_shift=0, hval=13992549041791010103x (c22f8537c22f8537) "has_prefix" 0x0x4ee9ba8: 1 refs, len=9, size_shift=0, hval=1381628766843602955x (132c880b132c880b) "aggregate" 0x0x4c49580: 1 refs, len=6, size_shift=0, hval=15951777156902688974x (dd6018cedd6018ce) "__INIT" 0x0x627f088: 1 refs, len=11, size_shift=0, hval=4977915312525876122x (45151b9a45151b9a) "read_string" 0x0x6b61498: 1 refs, len=5, size_shift=0, hval=17045325102583720158x (ec8d28deec8d28de) "certs" 0x0x4ef33d0: 1 refs, len=12, size_shift=0, hval=7267058527353030458x (64d9c73a64d9c73a) "read_hbuffer" 0x0x4ee9e78: 1 refs, len=8, size_shift=0, hval=10441818879220566770x (90e8caf290e8caf2) "allocate" 0x0x627f310: 1 refs, len=10, size_shift=0, hval=5269898974766199090x (4922713249227132) "parse_item" 0x0x627f3e8: 1 refs, len=12, size_shift=0, hval=561954521866860201x (7cc76a907cc76a9) "add_keychain" 0x0x627f0d0: 1 refs, len=10, size_shift=0, hval=17917283900022258374x (f8a6fac6f8a6fac6) "parse_cert" 0x0x4c495c8: 1 refs, len=6, size_shift=0, hval=17990890727435697099x (f9ac7bcbf9ac7bcb) "create" ==10728== ==10728== HEAP SUMMARY: ==10728== in use at exit: 0 bytes in 0 blocks ==10728== total heap usage: 2,458,329 allocs, 246,784 frees, 540,176,277 bytes allocated ==10728== ==10728== All heap blocks were freed -- no leaks are possible ==10728== ==10728== Use --track-origins=yes to see where uninitialised values come from ==10728== For lists of detected and suppressed errors, rerun with: -s ==10728== ERROR SUMMARY: 14 errors from 4 contexts (suppressed: 0 from 0)
Stephen R. van den Berg wrote: Recompiled with gcc-9 -O1 -g with RTL_DEBUG with valgrind support.
This time with: --with-double-precision --with-long-int \ --disable-noopty-retry \ --with-poll \ --without-machine-code \ --with-portable-bytecode \
Valgrind repots: http://hestia.cuci.nl/u/srb/pike81/pikemvg.zip
I tried checking it, but for me it's often unclear if a report is because valgrind is not looking right, or the Pike code have been strengled.
I think I found it.
commit be8d0c60fcd3bb8615740d55ba300460c9062679 (HEAD -> master) Author: Stephen R. van den Berg srb@cuci.nl Date: Mon Jul 6 00:13:44 2020 +0200
Stdio.Buffer: Put null in a freed io->output.u.object.
src/modules/_Stdio/buffer.cmod | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
This should/might fix it. Which is not to say, that: - The valgrind diagnostics might point at other issues. - The fact that gcc-10 and Pike are incompatible is disconcerting. It likely is a compiler bug, but it is worrisome nonetheless.
I think I found it.
commit be8d0c60fcd3bb8615740d55ba300460c9062679 (HEAD -> master) Author: Stephen R. van den Berg srb@cuci.nl Date: Mon Jul 6 00:13:44 2020 +0200
Stdio.Buffer: Put null in a freed io->output.u.object.
src/modules/_Stdio/buffer.cmod | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
This should/might fix it.
| diff --git a/src/modules/_Stdio/buffer.cmod b/src/modules/_Stdio/buffer.cmod | index 7cf3feadd1..ed42aa5224 100644 | --- a/src/modules/_Stdio/buffer.cmod | +++ b/src/modules/_Stdio/buffer.cmod | @@ -990,8 +990,10 @@ PIKECLASS Buffer | if (f) | assign_svalue(&io->output, f); | else { | - if (io->output.u.object) | + if (io->output.u.object) { | free_svalue(&io->output); | + io->output.u.object = 0; // free_svalue() puts in -1 | + } | SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); | } | }
Strange that this should be needed; the SET_SVAL() on the line below ought to have the same effect (during normal circumstances where sizeof(void *) == sizeof(INT_TYPE)). What are the sizes for the members of union anything on your system?
/grubba
Strange that this should be needed; the SET_SVAL() on the line below ought to have the same effect (during normal circumstances where sizeof(void *) == sizeof(INT_TYPE)). What are the sizes for the
Well, you are right. My fix was a no-op. However, several coredumps and valgrind runs later, I found and fixed two things:
commit 5884c9d61d11a8374e2feac0e4f211121468aea8 Author: Stephen R. van den Berg srb@cuci.nl Date: Sun Jul 19 23:55:26 2020 +0200
Stdio.Buffer: Protect against calls in destructed Buffer objects.
src/modules/_Stdio/buffer.cmod | 272 ++++++++++++++++++++++++------------------- 1 file changed, 149 insertions(+), 123 deletions(-)
commit 01543a00e48294140995709915891d7f7745bdb2 Author: Stephen R. van den Berg srb@cuci.nl Date: Mon Jul 6 03:40:03 2020 +0200
Stdio.Buffer: Check for PIKE_T_FUNCTION before acting on objects.
src/modules/_Stdio/buffer.cmod | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
Both caused segmentation faults. Mostly because the buffer.cmod code is not good with asynchronously destructed objects. These changes should be backported to Pike 8.0. I tried, but that is slightly non-trivial at some points. If someone else wants to give it a try, be my guest!
commit 01543a00e48294140995709915891d7f7745bdb2 Author: Stephen R. van den Berg srb@cuci.nl Date: Mon Jul 6 03:40:03 2020 +0200
Stdio.Buffer: Check for PIKE_T_FUNCTION before acting on objects.
src/modules/_Stdio/buffer.cmod | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
Both caused segmentation faults. Mostly because the buffer.cmod code is not good with asynchronously destructed objects.
Where did the segfaults occur then, exactly? What has output's type been at segfault, if not PIKE_T_FUNCTION?
Tobias S. Josefowitz @ Pike developers forum wrote:
Stdio.Buffer: Check for PIKE_T_FUNCTION before acting on objects.
src/modules/_Stdio/buffer.cmod | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
Both caused segmentation faults. Mostly because the buffer.cmod code is not good with asynchronously destructed objects.
Where did the segfaults occur then, exactly? What has output's type been at segfault, if not PIKE_T_FUNCTION?
This one caused segfaults in io_actually_trigger_output() because the value was PIKE_T_UNKNOWN with a value of -1, which then got dereferenced because -1 != 0 at:
if ( io->output.u.object ) { move_svalue(Pike_sp++, &io->output); SET_SVAL(io->output, PIKE_T_INT, NUMBER_NUMBER, integer, 0); --> apply_svalue(Pike_sp-1, 0); pop_n_elems(2); }
commit 5884c9d61d11a8374e2feac0e4f211121468aea8 Author: Stephen R. van den Berg srb@cuci.nl Date: Sun Jul 19 23:55:26 2020 +0200
Stdio.Buffer: Protect against calls in destructed Buffer objects.
src/modules/_Stdio/buffer.cmod | 272 ++++++++++++++++++++++++----------------
Regarding
#define CHECK_DESTRUCTED(io) ((io)->this ? (io) : already_destructed())
I don't get how that works, nothing really ever sets io->this to zero..., and if I am not mistaken we do not zero out CVAR Buffer [aka struct _Buffer] on destruct or free either... what am I missing?
Tobias S. Josefowitz @ Pike developers forum wrote:
Stdio.Buffer: Protect against calls in destructed Buffer objects.
#define CHECK_DESTRUCTED(io) ((io)->this ? (io) : already_destructed())
I don't get how that works, nothing really ever sets io->this to zero..., and if I am not mistaken we do not zero out CVAR Buffer [aka struct _Buffer] on destruct or free either... what am I missing?
Maybe you're not missing anything. I was assuming pike did this elsewhere on destruct. Apparently not, because I can indeed confirm that I still get heap corruptions and thus segfaults. I'll try setting this to zero explicitly on destruct.
Stephen R. van den Berg wrote:
zero..., and if I am not mistaken we do not zero out CVAR Buffer [aka struct _Buffer] on destruct or free either... what am I missing?
Maybe you're not missing anything. I was assuming pike did this elsewhere on destruct. Apparently not, because I can indeed confirm that I still get heap corruptions and thus segfaults. I'll try setting this to zero explicitly on destruct.
I can now confirm that I've been running three hours with io->this = 0 at destruct, and there have not been any coredumps yet. Seems promising.
I can now confirm that I've been running three hours with io->this = 0 at destruct, and there have not been any coredumps yet. Seems promising.
I'm still a bit surprised by the premise that a CMODs PIKEFUNs would be entered in/with an object *after* it has been destructed... you guard function entry, so this is apparently not a case of our object getting destructed while we are already executing.
I would think that this is simply not supposed to happen (and that therefore fixing it at this level is the wrong thing to do).
Grubba, do you have any thoughts about PIKEFUNs being entered in destructed objects?
Tobias S. Josefowitz @ Pike developers forum wrote:
I can now confirm that I've been running three hours with io->this = 0 at destruct, and there have not been any coredumps yet. Seems promising.
Four hours now, no coredump. Statistically relatively strong evidence.
I'm still a bit surprised by the premise that a CMODs PIKEFUNs would be entered in/with an object *after* it has been destructed... you guard function entry, so this is apparently not a case of our object getting destructed while we are already executing.
I would think that this is simply not supposed to happen (and that therefore fixing it at this level is the wrong thing to do).
Entering destructed objects happens "all the time" when callbacks to memberfunctions in already destructed objects are being called. Normal Pike deals with this, and thus PIKEFUN's have to guard against it too.
Entering destructed objects happens "all the time" when callbacks to memberfunctions in already destructed objects are being called. Normal Pike deals with this, and thus PIKEFUN's have to guard against it too.
I really don't think this is particularly true considering that, at least as long as these callbacks are stored in an svalue, it is impossible to call a PIKEFUN in the destructed object as sval.u.object->prog will be NULL thanks to the object's destruction and it will thus be pretty impossible to look up and call the identifier in the program.
Tobias S. Josefowitz @ Pike developers forum wrote:
I can now confirm that I've been running three hours with io->this = 0 at destruct, and there have not been any coredumps yet. Seems promising.
Four hours now, no coredump. Statistically relatively strong evidence.
I'm still a bit surprised by the premise that a CMODs PIKEFUNs would be entered in/with an object *after* it has been destructed... you guard function entry, so this is apparently not a case of our object getting destructed while we are already executing.
I would think that this is simply not supposed to happen (and that therefore fixing it at this level is the wrong thing to do).
Entering destructed objects happens "all the time" when callbacks to memberfunctions in already destructed objects are being called.
Not really; what does happen is that execution may return to a stack frame in an object that has been destructed.
Normal Pike deals with this, and thus PIKEFUN's have to guard against it too.
I agree with tobi; the Stdio.Buffer code probably does something unusual.
I'm also not sure why you removed several instances of
SET_SVAL(x, PIKE_T_INTEGER, NUMBER_NUMBER, integer, 0);
Also accessing the sval.tu.named_type field directly is not a supported operation; use the TYPEOF() macro instead.
/grubba
Henrik Grubbstr?m (Lysator) @ Pike (-) developers forum wrote:
Entering destructed objects happens "all the time" when callbacks to memberfunctions in already destructed objects are being called.
Not really; what does happen is that execution may return to a stack frame in an object that has been destructed.
Hmmm, ok. That would mean that a pikefun cannot be called after the object has been destructed.
I agree with tobi; the Stdio.Buffer code probably does something unusual.
The most likely cause for this are the callback-methods that auto-flush or auto-append to the Buffer. Maybe the number of spots to test for a destructed object can be reduced to only those functions that are being called from external spots.
I'm also not sure why you removed several instances of
SET_SVAL(x, PIKE_T_INTEGER, NUMBER_NUMBER, integer, 0);
They set it to zero, to test for later. However, some outside code (outside of buffer.cmod) seems to access this svalue and free it at times. After freeing it, leaves the value at -1 and the type set to PIKE_T_FREE or PIKE_T_UNKNOWN. So then the code in buffer.cmod would have to accomodate for either the explicit zero or the PIKE_T_FREE or the PIKE_T_UNKNOWN. This can all be simplified by simply testing for PIKE_T_FUNCTION instead. It then covers all internal freeing methods, as well as any external ones.
Also accessing the sval.tu.named_type field directly is not a supported operation; use the TYPEOF() macro instead.
Ok, I'll fix that.
Stephen R. van den Berg wrote:
Henrik Grubbstr?m (Lysator) @ Pike (-) developers forum wrote:
Not really; what does happen is that execution may return to a stack frame in an object that has been destructed.
Hmmm, ok. That would mean that a pikefun cannot be called after the object has been destructed.
I agree with tobi; the Stdio.Buffer code probably does something unusual.
The unusual part is most likely outside of Stdio.Buffer. At various spots in the code we call io_*() functions directly to manipulate Buffer objects. At least one of those spots is calling some of the PIKEFUNs after the object has been destructed.
Come to think of it, that might be the Shuffler code. We use callbacks there, and the callbacks are PIKEFUNs, I believe.
One thing I can confirm though, the destruct-guards I put in place now work and solve the coredump problems. Normally I would have gathered at least six coredumps in 24 hours.
The unusual part is most likely outside of Stdio.Buffer. At various spots in the code we call io_*() functions directly to manipulate Buffer objects. At least one of those spots is calling some of the PIKEFUNs after the object has been destructed.
Then that would be a bug.
Come to think of it, that might be the Shuffler code. We use callbacks there, and the callbacks are PIKEFUNs, I believe.
One thing I can confirm though, the destruct-guards I put in place now work and solve the coredump problems. Normally I would have gathered at least six coredumps in 24 hours.
They may work, but only in the sense that you are shielding yourself from the worst consequences of undefined/use-after-free/... memory access. Both your changes, the one checking io->output's type to be PIKE_T_FUNCTION and the CHECK_DESTRUCTED stuff are of this nature, you are guarding against stuff that is not supposed to happen.
What's more, io->output is exported as a mapped variable, albeit as a private one, meaning practically only the GC can see it. "User-accessible" svalues are not supposed to contain PIKE_T_FREE or PIKE_T_UNKNOWN, really. With the private map I think we should really treat it as user-accessible in this regard, if only to not constitute a special case for mapped (but private) variables.
Your changes should thus all be reverted and the real issue(s) should be identified and fixed.
Tobias S. Josefowitz @ Pike developers forum wrote:
They may work, but only in the sense that you are shielding yourself from the worst consequences of undefined/use-after-free/... memory access. Both your changes, the one checking io->output's type to be PIKE_T_FUNCTION and the CHECK_DESTRUCTED stuff are of this nature, you are guarding against stuff that is not supposed to happen.
Well, for the CHECK_DESTRUCTED stuff, I agree. The PIKE_T_FUNCTION check could be considered an optimisation. The type already changes from PIKE_T_FUNCTION to something else, so setting it explicitly to zero is extra work.
Your changes should thus all be reverted and the real issue(s) should be identified and fixed.
Agreed. The trouble is finding them. The problems are triggered by destruct-races, and therefore hard to reproduce under controlled circumstances.
Stephen R. van den Berg wrote:
Agreed. The trouble is finding them. The problems are triggered by destruct-races, and therefore hard to reproduce under controlled circumstances.
I might have found something, in the Shuffler. The error (if it actually is what we're looking for) was already present in Pike 8.0. But since the Shuffler code in 8.0 and older is hopelessly broken in other ways as well, it's non-critical to backport only this (unless you'd backport *all* Shuffler fixes).
I test-applied a commit here locally, and will let it run tonight. If it still hasn't coredumped in the morning, I'll push it to master tomorrow.
Stephen R. van den Berg wrote:
Stephen R. van den Berg wrote:
Agreed. The trouble is finding them. The problems are triggered by destruct-races, and therefore hard to reproduce under controlled circumstances.
I might have found something, in the Shuffler. The error (if it actually is what we're looking for) was already present in Pike 8.0. But since the Shuffler code in 8.0 and older is hopelessly broken in other ways as well, it's non-critical to backport only this (unless you'd backport *all* Shuffler fixes).
I test-applied a commit here locally, and will let it run tonight. If it still hasn't coredumped in the morning, I'll push it to master tomorrow.
Well, this experiment failed. I took out my reverts locally, and now changed the diagnostic Pike_error() in case of the already-destructed call into a Pike_fatal(), in hopes of finding out when it is being triggered from the next coredump.
Stephen R. van den Berg wrote:
Well, this experiment failed. I took out my reverts locally, and now changed the diagnostic Pike_error() in case of the already-destructed call into a Pike_fatal(), in hopes of finding out when it is being triggered from the next coredump.
This is what I find:
Coredump 1: [New LWP 13725] [New LWP 13648] [New LWP 13665] [New LWP 32741] [New LWP 13572] [New LWP 13650] [New LWP 13634] [New LWP 13726] [New LWP 13668] [New LWP 13671] [New LWP 13653] [New LWP 13656] [New LWP 13660] [New LWP 13727] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGABRT, Aborted. #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. [Current thread is 1 (Thread 0x7ff24b488700 (LWP 13725))] (gdb) where #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007ff24fbda55b in __GI_abort () at abort.c:79 #2 0x000055a1069066b9 in debug_va_fatal ( fmt=0x55a106b92bc8 "Stdio.Buffer already destructed.\n", args=args@entry=0x7ff24b4871b8) at /home/srb/pike/src/error.c:575 #3 0x000055a106904339 in debug_fatal ( fmt=fmt@entry=0x55a106b92bc8 "Stdio.Buffer already destructed.\n") at /home/srb/pike/src/error.c:583 #4 0x000055a106b14062 in already_destructed () at /home/srb/pike/src/modules/_Stdio/buffer.cmod:891 #5 0x000055a106b161ae in f_Buffer_cq__sizeof (args=<optimized out>) at /home/srb/pike/src/modules/_Stdio/buffer.cmod:1596 #6 0x000055a10686e9a6 in lower_mega_apply (args=args@entry=0, o=o@entry=0x55a10843d640, fun=fun@entry=21) at /home/srb/pike/src/interpret.c:2506 #7 0x000055a1068ac990 in mega_apply_low (args=args@entry=0, arg1=0x55a10843d640, arg2=21) at /home/srb/pike/src/interpret.c:3048 #8 0x000055a106a5c9b7 in pike_sizeof (s=0x7ff24dcdd160) at /home/srb/pike/src/svalue.c:2638 #9 0x000055a106879fed in eval_instruction_without_debug ( pc=0x55a107a65f0b "k\b", pc@entry=0x55a107c4cb0c "O") at /home/srb/pike/src/interpret_functions.h:2190 #10 0x000055a1068ac8d3 in eval_instruction (pc=0x55a107c4cb0c "O") at /home/srb/pike/src/interpret.c:2012 #11 catching_eval_instruction (pc=pc@entry=0x55a107c4cb0c "O") --Type <RET> for more, q to quit, c to continue without paging-- at /home/srb/pike/src/interpret.c:3082 #12 0x000055a106876e17 in eval_instruction_without_debug (pc=<optimized out>) at /home/srb/pike/src/interpret_functions.h:1502 #13 0x000055a10687e039 in eval_instruction (pc=<optimized out>) at /home/srb/pike/src/interpret.c:2012 #14 mega_apply (type=type@entry=APPLY_STACK, args=args@entry=1, arg1=arg1@entry=0x0, arg2=arg2@entry=0x0) at /home/srb/pike/src/interpret.c:3023 #15 0x000055a1068ad70d in f_call_function (args=args@entry=1) at /home/srb/pike/src/interpret.c:3103 #16 0x000055a106a0912d in new_thread_func (data=<optimized out>) at /home/srb/pike/src/threads.c:1832 #17 0x00007ff24fd82f27 in start_thread (arg=<optimized out>) at pthread_create.c:479 #18 0x00007ff24fcb231f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
I lost the coredump on this one (overwritten by the next). It hits sizeof() a buffer object that has been destroyed.
Then we have the following next one (I saved the core, so I can get more information from this one):
[New LWP 15651] [New LWP 15621] [New LWP 13738] [New LWP 15642] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGABRT, Aborted. #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. [Current thread is 1 (Thread 0x7f85113ec700 (LWP 15651))] (gdb) where #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007f85140e055b in __GI_abort () at abort.c:79 #2 0x0000561705dfb6b9 in debug_va_fatal ( fmt=0x561706087bc8 "Stdio.Buffer already destructed.\n", args=args@entry=0x7f85113eb1b8) at /home/srb/pike/src/error.c:575 #3 0x0000561705df9339 in debug_fatal ( fmt=fmt@entry=0x561706087bc8 "Stdio.Buffer already destructed.\n") at /home/srb/pike/src/error.c:583 #4 0x0000561706009062 in already_destructed () at /home/srb/pike/src/modules/_Stdio/buffer.cmod:891 #5 0x000056170600f7ed in f_Buffer_add (args=<optimized out>) at /home/srb/pike/src/modules/_Stdio/buffer.cmod:1227 #6 0x0000561705d639a6 in lower_mega_apply (args=args@entry=1, o=o@entry=0x561706e266e0, fun=11) at /home/srb/pike/src/interpret.c:2506 #7 0x0000561705d6fd91 in eval_instruction_without_debug ( pc=0x561706d776c8 "\035\232\337\030-\n\022\336\031\070\n]\177W\001\001\070", pc@entry=0x561706d776ac "O") at /home/srb/pike/src/interpret_functions.h:2424 #8 0x0000561705da18d3 in eval_instruction (pc=0x561706d776ac "O") at /home/srb/pike/src/interpret.c:2012 #9 catching_eval_instruction (pc=pc@entry=0x561706d776ac "O") at /home/srb/pike/src/interpret.c:3082 #10 0x0000561705d6be17 in eval_instruction_without_debug (pc=<optimized out>) at /home/srb/pike/src/interpret_functions.h:1502 #11 0x0000561705d73039 in eval_instruction (pc=<optimized out>) at /home/srb/pike/src/interpret.c:2012 --Type <RET> for more, q to quit, c to continue without paging-- #12 mega_apply (type=type@entry=APPLY_STACK, args=args@entry=1, arg1=arg1@entry=0x0, arg2=arg2@entry=0x0) at /home/srb/pike/src/interpret.c:3023 #13 0x0000561705da270d in f_call_function (args=args@entry=1) at /home/srb/pike/src/interpret.c:3103 #14 0x0000561705efe12d in new_thread_func (data=<optimized out>) at /home/srb/pike/src/threads.c:1832 #15 0x00007f8514288f27 in start_thread (arg=<optimized out>) at pthread_create.c:479 #16 0x00007f85141b831f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
It calls add() on a destructed Buffer object.
Am I reading those correctly that both are upon thread creation?
[New LWP 15651] [New LWP 15621] [New LWP 13738] [New LWP 15642] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGABRT, Aborted. #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. [Current thread is 1 (Thread 0x7f85113ec700 (LWP 15651))] (gdb) where #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007f85140e055b in __GI_abort () at abort.c:79 #2 0x0000561705dfb6b9 in debug_va_fatal ( fmt=0x561706087bc8 "Stdio.Buffer already destructed.\n", args=args@entry=0x7f85113eb1b8) at /home/srb/pike/src/error.c:575 #3 0x0000561705df9339 in debug_fatal ( fmt=fmt@entry=0x561706087bc8 "Stdio.Buffer already destructed.\n") at /home/srb/pike/src/error.c:583 #4 0x0000561706009062 in already_destructed () at /home/srb/pike/src/modules/_Stdio/buffer.cmod:891 #5 0x000056170600f7ed in f_Buffer_add (args=<optimized out>) at /home/srb/pike/src/modules/_Stdio/buffer.cmod:1227 #6 0x0000561705d639a6 in lower_mega_apply (args=args@entry=1, o=o@entry=0x561706e266e0, fun=11) at /home/srb/pike/src/interpret.c:2506 #7 0x0000561705d6fd91 in eval_instruction_without_debug ( pc=0x561706d776c8 "\035\232\337\030-\n\022\336\031\070\n]\177W\001\001\070", pc@entry=0x561706d776ac "O") at /home/srb/pike/src/interpret_functions.h:2424 #8 0x0000561705da18d3 in eval_instruction (pc=0x561706d776ac "O") at /home/srb/pike/src/interpret.c:2012 #9 catching_eval_instruction (pc=pc@entry=0x561706d776ac "O") at /home/srb/pike/src/interpret.c:3082 #10 0x0000561705d6be17 in eval_instruction_without_debug (pc=<optimized out>) at /home/srb/pike/src/interpret_functions.h:1502 #11 0x0000561705d73039 in eval_instruction (pc=<optimized out>) at /home/srb/pike/src/interpret.c:2012 --Type <RET> for more, q to quit, c to continue without paging-- #12 mega_apply (type=type@entry=APPLY_STACK, args=args@entry=1, arg1=arg1@entry=0x0, arg2=arg2@entry=0x0) at /home/srb/pike/src/interpret.c:3023 #13 0x0000561705da270d in f_call_function (args=args@entry=1) at /home/srb/pike/src/interpret.c:3103 #14 0x0000561705efe12d in new_thread_func (data=<optimized out>) at /home/srb/pike/src/threads.c:1832 #15 0x00007f8514288f27 in start_thread (arg=<optimized out>) at pthread_create.c:479 #16 0x00007f85141b831f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
It calls add() on a destructed Buffer object.
Am I reading those correctly that both are upon thread creation?
First, nice backtrace. I think it's more that any thread started ever will have been started by thread creation, and that's what we're seeing here, not that this necessarily immediately follows thread creation.
Second, if we have a look at lower_mega_apply (#6), we find that it looks up the identifier in the object first, then does
#ifdef PIKE_USE_MACHINE_CODE call_check_threads_etc(); #endif
I assume you have machine code enabled. call_check_threads_etc() indeed may schedule other threads and stuff and we may return from it with the object we just looked up the identifier in destructed. When we then call the identifier, we will indeed call into a destructed object.
I am unsure about how exactly not that great that is, maybe grubba has some thoughts on this...
So, before calling call_check_threads_etc() we set up our new stackframe, meaning we keep a reference on both the object and program in question. This means our storage, i.e. CVAR Buffer b; aka Buffer *io; will not be freed even though the object is destructed, and *keeps being valid*, except in so far as our actions in EXIT contradict this notion (especially io_unlink_external_storage( io ); and free( io->buffer ); probaly indeed make it really unsafe to execute our PIKEFUNs after destruction).
Now, what to do about it... indeed check at every function entry that we're not destructed? I don't know, but that just doesn't feel cool. Prevent functions being called in destructed objects more/better?
Tobias S. Josefowitz @ Pike developers forum wrote:
Am I reading those correctly that both are upon thread creation?
First, nice backtrace. I think it's more that any thread started ever will have been started by thread creation, and that's what we're seeing here, not that this necessarily immediately follows thread creation.
That was the other explanation, but since I don't know enough about the innards of Pike in this respect, I wasn't quite sure.
#ifdef PIKE_USE_MACHINE_CODE call_check_threads_etc(); #endif
I assume you have machine code enabled. call_check_threads_etc()
Normally I do, however, to get to the bottom of this, I temporarily compiled with: gcc-9 -g -O1 -pipe -DPIKE_DEBUG=1 --with-cdebug --with-rtldebug --with-valgrind --with-double-precision --with-long-int \ --disable-noopty-retry \ --without-machine-code \ --with-poll \ --with-portable-bytecode \
indeed may schedule other threads and stuff and we may return from it with the object we just looked up the identifier in destructed. When we then call the identifier, we will indeed call into a destructed object.
I already had the distinct impression this was happening. In the pgsql driver I've had numerous issues over the years where I had to cover for methods running in destructed objects (because the driver is asynchronous to the bone). But in most cases this did not result in segfaults, so I'm not quite sure if the rest of the Pike system is more robust against this naturally. I have one unexplained segfault there of about six months ago, but that was so hard to reproduce, that it might as well have been the same problem I'm chasing now.
Now, what to do about it... indeed check at every function entry that we're not destructed? I don't know, but that just doesn't feel cool.
Actually, it seems like Pike actually does this check before *every* access of a local variable. I.e. in those numerous cases I had to deal with in pgsql I invariably got an exception like "lookup in destructed object". With that in mind, a check upon function entry does not sound so bad.
P.S. Speaking about asynchronous destructs. One of the "fun" things I discovered about three months ago was that since the actual destruct() method can also be called while being inside a totally random stackframe (very far beyond the stackframe where the object scope actually already ended), it is quite hazardous to try to acquire any kind of mutex from within a destruct() method, since it can result in very random and very rare deadlock situations.
Another core stacktrace (core5):
[New LWP 31798] [New LWP 28691] [New LWP 31695] [New LWP 31738] [New LWP 31703] [New LWP 31730] [New LWP 31707] [New LWP 31717] [New LWP 31711] [New LWP 31725] [New LWP 31699] [New LWP 31673] [New LWP 31367] [New LWP 31799] [New LWP 31694] [New LWP 31715] [New LWP 31742] [New LWP 31800] [New LWP 31801] [New LWP 31721] [New LWP 31731] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/local/bin/pike /home/spike.git/spike -n background'. Program terminated with signal SIGABRT, Aborted. #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. [Current thread is 1 (Thread 0x7ff85afff700 (LWP 31798))] (gdb) where #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007ff85d2ce537 in __GI_abort () at abort.c:79 #2 0x0000564bfdab76b9 in debug_va_fatal ( fmt=0x564bfdd43bc8 "Stdio.Buffer already destructed.\n", args=args@entry=0x7ff85affe128) at /home/srb/pike/src/error.c:575 #3 0x0000564bfdab5339 in debug_fatal ( fmt=fmt@entry=0x564bfdd43bc8 "Stdio.Buffer already destructed.\n") at /home/srb/pike/src/error.c:583 #4 0x0000564bfdcc5062 in already_destructed () at /home/srb/pike/src/modules/_Stdio/buffer.cmod:891 #5 0x0000564bfdccc2f7 in f_Buffer_output_to (args=1) at /home/srb/pike/src/modules/_Stdio/buffer.cmod:1112 #6 0x0000564bfda1f9a6 in lower_mega_apply (args=1, o=0x564bff5f6700, fun=7) at /home/srb/pike/src/interpret.c:2506 #7 0x0000564bfda2b2fd in eval_instruction_without_debug ( pc=0x564bff890c44 "8\002\A", pc@entry=0x564bff33568c "O") at /home/srb/pike/src/interpret_functions.h:2345 #8 0x0000564bfda5d8d3 in eval_instruction (pc=0x564bff33568c "O") at /home/srb/pike/src/interpret.c:2012 #9 catching_eval_instruction (pc=pc@entry=0x564bff33568c "O") at /home/srb/pike/src/interpret.c:3082 #10 0x0000564bfda27e17 in eval_instruction_without_debug (pc=<optimized out>) at /home/srb/pike/src/interpret_functions.h:1502 #11 0x0000564bfda2f039 in eval_instruction (pc=<optimized out>) at /home/srb/pike/src/interpret.c:2012 --Type <RET> for more, q to quit, c to continue without paging-- #12 mega_apply (type=type@entry=APPLY_STACK, args=args@entry=1, arg1=arg1@entry=0x0, arg2=arg2@entry=0x0) at /home/srb/pike/src/interpret.c:3023 #13 0x0000564bfda5e70d in f_call_function (args=args@entry=1) at /home/srb/pike/src/interpret.c:3103 #14 0x0000564bfdbba12d in new_thread_func (data=<optimized out>) at /home/srb/pike/src/threads.c:1832 #15 0x00007ff85d478ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477 #16 0x00007ff85d3a6dcf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
#ifdef PIKE_USE_MACHINE_CODE call_check_threads_etc(); #endif
I assume you have machine code enabled. call_check_threads_etc()
Normally I do, however, to get to the bottom of this, I temporarily compiled with: gcc-9 -g -O1 -pipe -DPIKE_DEBUG=1 --with-cdebug --with-rtldebug --with-valgrind --with-double-precision --with-long-int \ --disable-noopty-retry \ --without-machine-code \ --with-poll \ --with-portable-bytecode \
Well, that actually makes it more interesting (in you could say a bad sense), because without that call to call_check_threads_etc() we once more have no explanation for how the object could have been destructed between interpret.c:2403 and interpret.c:2506.
Actually no,
2503 #ifndef PIKE_USE_MACHINE_CODE 2504 FAST_CHECK_THREADS_ON_CALL(); 2505 #endif
would then be to blame. So ok, not so mysterious.
Now, what to do about it... indeed check at every function entry that we're not destructed? I don't know, but that just doesn't feel cool.
Actually, it seems like Pike actually does this check before *every* access of a local variable. I.e. in those numerous cases I had to deal with in pgsql I invariably got an exception like "lookup in destructed object". With that in mind, a check upon function entry does not sound so bad.
Well, I mean, so either we can manually do it in every "C function", or we can just have "Pike" prevent it from happening (I'm assuming here there aren't any cases in which we actualy want or even need to call functions in destructed objects). In which case I'd prefer to not having to manually check in each case if
* my function might actually be safe to be called in a destructed object, or * my object is destructed.
P.S. Speaking about asynchronous destructs. One of the "fun" things I discovered about three months ago was that since the actual destruct() method can also be called while being inside a totally random stackframe (very far beyond the stackframe where the object scope actually already ended), it is quite hazardous to try to acquire any kind of mutex from within a destruct() method, since it can result in very random and very rare deadlock situations. -- Stephen.
The fixes in master work, in that there are no segmentation faults anymore, however, now I regularly get this:
(gdb) where #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007f010403c537 in __GI_abort () at abort.c:79 #2 0x000056469288b3c0 in debug_va_fatal ( fmt=0x564692a7c4b8 "Recursive Pike_error() calls, original error: %s, new error: %s", args=args@entry=0x7f0101258768) at /home/srb/pike/src/error.c:575 #3 0x0000564692889bf6 in debug_fatal ( fmt=fmt@entry=0x564692a7c4b8 "Recursive Pike_error() calls, original error: %s, new error: %s") at /home/srb/pike/src/error.c:583 #4 0x000056469288a621 in va_error ( fmt=0x564692a8ba50 "Cannot access variables in destructed object.\n", args=args@entry=0x7f0101258868) at /home/srb/pike/src/error.c:289 #5 0x000056469288a859 in Pike_error ( fmt=fmt@entry=0x564692a8ba50 "Cannot access variables in destructed object.\n") at /home/srb/pike/src/error.c:332 #6 0x00005646928f83af in low_object_index_no_free (to=<optimized out>, o=<optimized out>, f=<optimized out>) at /home/srb/pike/src/object.c:1373 #7 0x00007f01010e9924 in ?? () #8 0x0300000000000001 in ?? () #9 0x00007f01010e93b8 in ?? () #10 0x0000000000000019 in ?? () #11 0x0000000000000000 in ?? () (gdb)
Can we somehow get rid the recursion in Pike_error() in this case?
pike-devel@lists.lysator.liu.se