Binding stack overflow when quickloading deeds
Hello! I'm trying to use deeds library in ECL. Unfortunately when I'm trying to quickload it, ECL produces "Binding stack overflow" error:
;;; Loading "/home/lock/.quicklisp/setup.lisp"
;;; Loading #P"/usr/local/lib/ecl-16.1.3/asdf.fas"
ECL (Embeddable Common-Lisp) 16.1.3 (git:fa24f95f7bb80ef98dd685d6e9f946f606f772c0)
Copyright (C) 1984 Taiichi Yuasa and Masami Hagiya
Copyright (C) 1993 Giuseppe Attardi
Copyright (C) 2013 Juan J. Garcia-Ripoll
Copyright (C) 2018 Daniel Kochmanski
Copyright (C) 2019 Daniel Kochmanski and Marius Gerbershagen
ECL is free software, and you are welcome to redistribute it
under certain conditions; see file 'Copyright' for details.
Type :h for Help.
Top level in: #<process TOP-LEVEL 0x7f14e4c04f80>.
> (ql:quickload :deeds)
To load "deeds":
Load 1 ASDF system:
deeds
; Loading "deeds"
[package closer-mop]..............................
[package closer-common-lisp]......................
[package closer-common-lisp-user].................
[package alexandria.0.dev]........................
[package bordeaux-threads]........................
[package lambda-fiddle]...........................
[package trivial-indent]..........................
[package documentation-utils].....................
[package form-fiddle].............................
[package deeds]..
;;;
;;; Binding stack overflow.
;;; Jumping to the outermost toplevel prompt
;;;
Top level in: #<process TOP-LEVEL 0x7f14e4c04f80>.
>
I've also tried bumping ext:binding-stack
to some large values like 1048576
, but that got ECL to core with SIGSEGV and enormously large stack (55113 frames to be exact) that looked like some recursion went bad; the repeating pattern seemed to be this:
#54528 0x00007f7d37efa570 in L31coerce_to_condition (v1datum=<optimized out>, v2arguments=<optimized out>, v3default_type=v3default_type@entry=0x7f7d380e3800 <cl_symbols+43232>, v4function_name=v4function_name@entry=0x7f7d380dd948 <cl_symbols+18984>) at clos/conditions.c:1943
#54529 0x00007f7d37efafe9 in L84universal_error_handler (v1continue_string=<optimized out>, v2datum=<optimized out>, v3args=<optimized out>) at clos/conditions.c:3504
#54530 0x00007f7d37f4d53d in ecl_apply_from_stack_frame (frame=frame@entry=0x7fff860cd980, x=x@entry=0x7f7d380e9098 <cl_symbols+65912>) at /tmp/ecl/src/c/eval.d:50
#54531 0x00007f7d37f4d6c6 in cl_funcall (narg=<optimized out>, narg@entry=4, function=0x7f7d380e9098 <cl_symbols+65912>) at /tmp/ecl/src/c/eval.d:136
#54532 0x00007f7d37f709d0 in cl_error (narg=narg@entry=5, eformat=0x7f7d380e4f30 <cl_symbols+49168>) at /tmp/ecl/src/c/error.d:555
#54533 0x00007f7d37ee289f in LC7__g33 (v1class=<optimized out>, v2object=0x7f7d35d5d900, v3slot_name=0x7f7d35e1b300) at clos/slotvalue.c:171
#54534 0x00007f7d37f4d53d in ecl_apply_from_stack_frame (frame=frame@entry=0x7fff860cdd80, x=x@entry=0x7f7d35f4c700) at /tmp/ecl/src/c/eval.d:50
#54535 0x00007f7d37f4da5d in cl_apply (narg=narg@entry=2, fun=0x7f7d35f4c700, lastarg=0x7fff860cdd80) at /tmp/ecl/src/c/eval.d:145
#54536 0x00007f7d37ed69b2 in LC5__g14 (narg=narg@entry=2, v1_combined_method_args_=<optimized out>, v2_next_methods_=v2_next_methods_@entry=0x1) at clos/kernel.c:291
#54537 0x00007f7d37edc291 in LC2__g8 (narg=<optimized out>, v1_combined_method_args_=<optimized out>, v2no_next_methods=<optimized out>) at clos/combin.c:161
#54538 0x00007f7d37f5acd8 in _ecl_standard_dispatch (frame=<optimized out>, frame@entry=0x7fff860cddf0, gf=0x7f7d35eb7900) at /tmp/ecl/src/c/clos/gfun.d:256
#54539 0x00007f7d37f5b0b5 in generic_function_dispatch_vararg (narg=<optimized out>) at /tmp/ecl/src/c/clos/gfun.d:269
#54540 0x00007f7d37ed15fa in cl_slot_value (v1self=0x7f7d35d5d900, v2slot_name=0x7f7d35e1b300) at clos/std-slot-value.c:337
#54541 0x00007f7d37ee059d in LC5__g110 (narg=1, v1self=0x7f7d35d5d900) at clos/std-accessors.c:164
#54542 0x00007f7d37f4d4df in ecl_apply_from_stack_frame (frame=frame@entry=0x7fff860ce150, x=x@entry=0x7f7d35e9e630) at /tmp/ecl/src/c/eval.d:69
#54543 0x00007f7d37f4da5d in cl_apply (narg=narg@entry=2, fun=0x7f7d35e9e630, lastarg=0x7fff860ce150) at /tmp/ecl/src/c/eval.d:145
#54544 0x00007f7d37ed69b2 in LC5__g14 (narg=narg@entry=2, v1_combined_method_args_=<optimized out>, v2_next_methods_=v2_next_methods_@entry=0x7f7d349dc451) at clos/kernel.c:291
#54545 0x00007f7d37edc291 in LC2__g8 (narg=<optimized out>, v1_combined_method_args_=<optimized out>, v2no_next_methods=<optimized out>) at clos/combin.c:161
#54546 0x00007f7d37f5acd8 in _ecl_standard_dispatch (frame=<optimized out>, frame@entry=0x7fff860ce1c0, gf=0x7f7d35e2e900) at /tmp/ecl/src/c/clos/gfun.d:256
#54547 0x00007f7d37f5b0b5 in generic_function_dispatch_vararg (narg=<optimized out>) at /tmp/ecl/src/c/clos/gfun.d:269
#54548 0x00007f7d37ee88a0 in L47check_initargs (narg=narg@entry=5, v1class=v1class@entry=0x7f7d35d5db10, v2initargs=v2initargs@entry=0x7f7d34a22821) at clos/standard.c:2860
#54549 0x00007f7d37ee8dfa in LC6__g72 (narg=<optimized out>, v1class=0x7f7d35d5db10) at clos/standard.c:304
#54550 0x00007f7d37f4d4df in ecl_apply_from_stack_frame (frame=frame@entry=0x7fff860ce740, x=x@entry=0x7f7d35ebb5d0) at /tmp/ecl/src/c/eval.d:69
#54551 0x00007f7d37f4da5d in cl_apply (narg=narg@entry=2, fun=0x7f7d35ebb5d0, lastarg=0x7fff860ce740) at /tmp/ecl/src/c/eval.d:145
#54552 0x00007f7d37ed69b2 in LC5__g14 (narg=narg@entry=2, v1_combined_method_args_=<optimized out>, v2_next_methods_=v2_next_methods_@entry=0x1) at clos/kernel.c:291
#54553 0x00007f7d37edc291 in LC2__g8 (narg=<optimized out>, v1_combined_method_args_=<optimized out>, v2no_next_methods=<optimized out>) at clos/combin.c:161
#54554 0x00007f7d37f5acd8 in _ecl_standard_dispatch (frame=<optimized out>, frame@entry=0x7fff860ce740, gf=0x7f7d35ebb540) at /tmp/ecl/src/c/clos/gfun.d:256
#54555 0x00007f7d37f4d516 in ecl_apply_from_stack_frame (frame=frame@entry=0x7fff860ce740, x=x@entry=0x7f7d35ebb540) at /tmp/ecl/src/c/eval.d:62
#54556 0x00007f7d37f4da15 in cl_apply (narg=<optimized out>, narg@entry=3, fun=0x7f7d35ebb540, lastarg=<optimized out>) at /tmp/ecl/src/c/eval.d:170
#54557 0x00007f7d37efa3c3 in cl_make_condition (narg=<optimized out>, v1type=0x7f7d380e4f30 <cl_symbols+49168>) at clos/conditions.c:1699
#54558 0x00007f7d37f4d4df in ecl_apply_from_stack_frame (frame=frame@entry=0x7fff860ce9b0, x=x@entry=0x7f7d35f70300) at /tmp/ecl/src/c/eval.d:69
#54559 0x00007f7d37f4da15 in cl_apply (narg=<optimized out>, narg@entry=3, fun=0x7f7d35f70300, lastarg=<optimized out>) at /tmp/ecl/src/c/eval.d:170
#54560 0x00007f7d37efa570 in L31coerce_to_condition (v1datum=<optimized out>, v2arguments=<optimized out>, v3default_type=v3default_type@entry=0x7f7d380e3800 <cl_symbols+43232>, v4function_name=v4function_name@entry=0x7f7d380dd948 <cl_symbols+18984>) at clos/conditions.c:1943
I've tried this with both 16.1.3 and latest develop (fa24f95f) versions; the difference is that 16.1.3 version just says "Stack overflow". Here are the details:
> (lisp-implementation-version)
"16.1.3"
> (ext:lisp-implementation-vcs-id)
"fa24f95f7bb80ef98dd685d6e9f946f606f772c0"
> (software-type)
"Linux"
> (software-version)
"4.19.97-gentoo"
> (machine-type)
"x86_64"
> *features*
(:QUICKLISP :ASDF-PACKAGE-SYSTEM :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-UNIX
:NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :WALKER :CDR-1 :CDR-5 :LINUX :FORMATTER
:CDR-7 :ECL-WEAK-HASH :LITTLE-ENDIAN :ECL-READ-WRITE-LOCK :LONG-LONG :UINT64-T
:UINT32-T :UINT16-T :COMPLEX-FLOAT :LONG-FLOAT :UNICODE :DFFI :CLOS-STREAMS
:CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS :BOEHM-GC :ANSI-CL
:COMMON-LISP :FLOATING-POINT-EXCEPTIONS :IEEE-FLOATING-POINT
:PACKAGE-LOCAL-NICKNAMES :CDR-14 :PREFIXED-API :FFI :X86_64 :COMMON :ECL)
What can be done about this issue? Is there more information I can provide?
Maybe there is some user-level workaround to be added to deeds library?