fukamachi / qlot

A project-local library installer for Common Lisp
https://qlot.tech
MIT License
452 stars 37 forks source link

Installing ace.core hangs forever with high CPU usage #132

Open mathrick opened 2 years ago

mathrick commented 2 years ago
$ qlot add github ace.core qitab/ace.core

Reading '/tmp/qlisp/qlfile'...
Installing dist "quicklisp" version "2022-07-08".
Downloading http://beta.quicklisp.org/dist/quicklisp/2022-07-08/releases.txt
##########################################################################
Downloading http://beta.quicklisp.org/dist/quicklisp/2022-07-08/systems.txt
##########################################################################
^CBacktrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10008B8083}>
0: ((FLET "CLEANUP-FUN-7" :IN SB-IMPL::REFILL-INPUT-BUFFER)) [cleanup]
1: (SB-IMPL::REFILL-INPUT-BUFFER #<SB-SYS:FD-STREAM for "file /tmp/tmp5GEXGEG5.tmp" {1003E28DE3}>)
2: (SB-IMPL::FD-STREAM-READ-N-BYTES #<SB-SYS:FD-STREAM for "file /tmp/tmp5GEXGEG5.tmp" {1003E28DE3}> #(59 59 59 32 67 111 112 121 114 105 103 104 ...) 0 512 NIL)
3: (SB-IMPL::ANSI-STREAM-READ-N-BYTES #<SB-SYS:FD-STREAM for "file /tmp/tmp5GEXGEG5.tmp" {1003E28DE3}> #(59 59 59 32 67 111 112 121 114 105 103 104 ...) 0 512 NIL)
4: (SB-IMPL:ANSI-STREAM-READ-SEQUENCE #(59 59 59 32 67 111 112 121 114 105 103 104 ...) #<SB-SYS:FD-STREAM for "file /tmp/tmp5GEXGEG5.tmp" {1003E28DE3}> 0 512)
5: (READ-SEQUENCE #(59 59 59 32 67 111 112 121 114 105 103 104 ...) #<SB-SYS:FD-STREAM for "file /tmp/tmp5GEXGEG5.tmp" {1003E28DE3}> :START 0 :END 512)
6: (ARCHIVE::TRANSFER-ENTRY-DATA-TO-STREAM* #<ARCHIVE:TAR-ARCHIVE {1003F14F73}> #<Tar-Entry ace.core-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/with.lisp> #<SB-SYS:FD-STREAM for "file /tmp/qlot-VNEVTHJH/ace.core-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/with.lisp" {10043E3623}> #<FUNCTION ARCHIVE::ROUND-UP-TO-TAR-BLOCK>)
7: ((:METHOD ARCHIVE:EXTRACT-ENTRY (ARCHIVE:TAR-ARCHIVE ARCHIVE::TAR-ENTRY)) #<ARCHIVE:TAR-ARCHIVE {1003F14F73}> #<Tar-Entry ace.core-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/with.lisp>) [fast-method]
8: (ARCHIVE::EXTRACT-FILES-FROM-ARCHIVE #<ARCHIVE:TAR-ARCHIVE {1003F14F73}> #<CLOSURE (LAMBDA (&REST SB-IMPL::ARGUMENTS) :IN CONSTANTLY) {100437173B}>)
9: ((FLET "BEFORE4" :IN QLOT/UTILS/ARCHIVE:EXTRACT-TARBALL) #<SB-SYS:FD-STREAM for "file /tmp/tmp5GEXGEG5.tmp" {1003E10963}> #P"/tmp/tmp5GEXGEG5.tmp")
10: (UIOP/STREAM:CALL-WITH-TEMPORARY-FILE #<CLOSURE (FLET "BEFORE4" :IN QLOT/UTILS/ARCHIVE:EXTRACT-TARBALL) {7F1F521AF5BB}> :WANT-STREAM-P T :WANT-PATHNAME-P T :DIRECTION :OUTPUT :KEEP NIL :AFTER NIL :DIRECTORY NIL :TYPE "tmp" :PREFIX NIL :SUFFIX NIL :ELEMENT-TYPE (UNSIGNED-BYTE 8) :EXTERNAL-FORMAT NIL)
11: (QLOT/UTILS/ARCHIVE:EXTRACT-TARBALL #P"/tmp/qlot-6AK40E67/ace.core/github-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/archive.tar.gz" #P"/tmp/qlot-VNEVTHJH/")

This seems like an infite loop, I've given it anywhere from 10s to over an hour, and it never finishes, seemingly always stuck REFILL-INPUT-BUFFER. It's not just waiting for something and deadlocked since it keeps a CPU core pegged at 100%, but never makes any progress.

mathrick commented 2 years ago

So this might be caused by the ASDF definition for ace.core being invalid, specifically on line 69 it evaluates *FILES*, but the DEFPARAMETER form for it is not wrapped in EVAL-WHEN. The system won't load through regular ASDF calls or if given a regular git URL either, but it doesn't get stuck:

$ qlot add git ace.core https://github.com/qitab/ace.core

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {10008B8083}>
0: ((LAMBDA ()))
1: (SB-INT:SIMPLE-EVAL-IN-LEXENV (LOOP ASDF/USER::FOR ASDF/USER::F ASDF/USER::IN ASDF/USER::*FILES* ASDF/USER::COLLECT (SB-INT:QUASIQUOTE (:FILE #S(SB-IMPL::COMMA :EXPR ASDF/USER::F :KIND 0)))) #<NULL-LEXENV>)
2: (EVAL (LOOP ASDF/USER::FOR ASDF/USER::F ASDF/USER::IN ASDF/USER::*FILES* ASDF/USER::COLLECT (SB-INT:QUASIQUOTE (:FILE #S(SB-IMPL::COMMA :EXPR ASDF/USER::F :KIND 0)))))
3: (SB-IMPL::SHARP-DOT #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}> #\. NIL)
4: (SB-IMPL::READ-MAYBE-NOTHING #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}> #\#)
5: (SB-IMPL::READ-LIST #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}> #<unused argument>)
6: (SB-IMPL::READ-MAYBE-NOTHING #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}> #\()
7: (SB-IMPL::%READ-PRESERVING-WHITESPACE #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}> NIL #:EOF T)
8: (SB-IMPL::%READ-PRESERVING-WHITESPACE #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}> NIL #:EOF NIL)
9: ((LAMBDA NIL :IN QLOT/UTILS/ASDF::READ-ASD-FILE))
10: ((FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX))
11: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX) {7F8D28F4F1EB}>)
12: (UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN QLOT/UTILS/ASDF::READ-ASD-FILE) {1001E38BCB}> :PACKAGE :CL)
13: ((LAMBDA (QLOT/UTILS/ASDF::IN) :IN QLOT/UTILS/ASDF::READ-ASD-FILE) #<SB-SYS:FD-STREAM for "file /tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" {1001E38A63}>)
14: (UIOP/STREAM:CALL-WITH-INPUT-FILE #P"/tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/ace.core.asd" #<CLOSURE (LAMBDA (QLOT/UTILS/ASDF::IN) :IN QLOT/UTILS/ASDF::READ-ASD-FILE) {1001E3857B}> :ELEMENT-TYPE NIL :EXTERNAL-FORMAT NIL :IF-DOES-NOT-EXIST :ERROR)
15: (QLOT/UTILS/DISTIFY:SYSTEMS.TXT "ace.core" #P"/tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/")
16: ((LAMBDA (QLOT/DISTIFY/GIT::OUT) :IN QLOT/DISTIFY/GIT::WRITE-METADATA-FILES) #<SB-SYS:FD-STREAM for "file /tmp/qlot-ZYT2BV80/ace.core/git-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/systems.txt" {1001DE26E3}>)
17: (UIOP/STREAM:CALL-WITH-OUTPUT-FILE #P"/tmp/qlot-ZYT2BV80/ace.core/git-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/systems.txt" #<CLOSURE (LAMBDA (QLOT/DISTIFY/GIT::OUT) :IN QLOT/DISTIFY/GIT::WRITE-METADATA-FILES) {1001DE21FB}> :ELEMENT-TYPE NIL :EXTERNAL-FORMAT NIL :IF-EXISTS :SUPERSEDE :IF-DOES-NOT-EXIST :CREATE)
18: (QLOT/DISTIFY/GIT::WRITE-METADATA-FILES #<QLOT/SOURCE/GIT:SOURCE-GIT ace.core https://github.com/qitab/ace.core ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a {1001C83E83}> #P"/tmp/qlot-ZYT2BV80/ace.core/git-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/" #P"/tmp/qlot-LUFEP2S0/ace.core-ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/" #P"/tmp/qlot-ZYT2BV80/ace.core/git-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a/archive.tar.gz")
19: (QLOT/DISTIFY/GIT:DISTIFY-GIT #<QLOT/SOURCE/GIT:SOURCE-GIT ace.core https://github.com/qitab/ace.core ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a {1001C83E83}> #P"/tmp/qlot-ZYT2BV80/" :DISTINFO-ONLY NIL)
20: (QLOT/DISTIFY:DISTIFY #<QLOT/SOURCE/GIT:SOURCE-GIT ace.core https://github.com/qitab/ace.core ref-01587b8eac4e2b0fb6f1e2cf816e660f5c33721a {1001C83E83}> #P"/tmp/qlot-ZYT2BV80/" :DISTINFO-ONLY NIL)
21: (SB-INT:SIMPLE-EVAL-IN-LEXENV (UIOP/PACKAGE:SYMBOL-CALL :QLOT/DISTIFY :DISTIFY (QLOT/SOURCE/BASE:DEFROST-SOURCE (MAKE-INSTANCE (QUOTE QLOT/SOURCE/GIT:SOURCE-GIT) :PROJECT-NAME "ace.core" :REMOTE-URL "https://github.com/qitab/ace.core")) #P"/tmp/qlot-ZYT2BV80/" :DISTINFO-ONLY NIL) #<NULL-LEXENV>)
22: (EVAL (UIOP/PACKAGE:SYMBOL-CALL :QLOT/DISTIFY :DISTIFY (QLOT/SOURCE/BASE:DEFROST-SOURCE (MAKE-INSTANCE (QUOTE QLOT/SOURCE/GIT:SOURCE-GIT) :PROJECT-NAME "ace.core" :REMOTE-URL "https://github.com/qitab/ace.core")) #P"/tmp/qlot-ZYT2BV80/" :DISTINFO-ONLY NIL))
23: (ROSWELL::EVAL #<(SIMPLE-ARRAY CHARACTER (250)) (uiop/package:symbol-call :qlot/distify :distify (qlot/source/base:defrost-source (make-instance (quote qlot/source/git:source-git) :project-name "ace.core" :remote-url "https://github.com/qitab/ace.c... {1004B6960F}>)
24: (ROSWELL:RUN ((:EVAL "(require 'asdf)") (:EVAL "(setf *debugger-hook* (lambda (c parent) (declare (ignore parent)) (format *error-output* \"~&Error: ~A~2%\" c) (uiop/image:print-backtrace :condition c) (uiop/image:quit -1)))") (:EVAL "(push #P\"/home/mathrick/.roswell/lisp/quicklisp/dists/quicklisp/software/qlot-20220331-git/\" asdf/system-registry:*central-registry*)") (:EVAL #<(SIMPLE-ARRAY CHARACTER (212)) (setf asdf/source-registry:*default-source-registries* (quote (asdf/source-registry:environment-source-registry asdf/source-registry:system-source-registry asdf/source-registry:system-source-registry-... {1004B68B6F}>) (:EVAL "(load #P\"/home/mathrick/.roswell/lisp/quicklisp/setup.lisp\")") (:EVAL "(uiop/package:symbol-call :ql :quickload \"qlot/distify\" :silent t)") (:EVAL "(let ((*error-output* (make-broadcast-stream))) (load (merge-pathnames #P\"setup.lisp\" #P\"/home/mathrick/Dev/clutch/.qlot/\")))") (:EVAL #<(SIMPLE-ARRAY CHARACTER (250)) (uiop/package:symbol-call :qlot/distify :distify (qlot/source/base:defrost-source (make-instance (quote qlot/source/git:source-git) :project-name "ace.core" :remote-url "https://github.com/qitab/ace.c... {1004B6960F}>) (:HOOK) (:QUIT)))
25: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ROSWELL:RUN (QUOTE ((:EVAL "(require 'asdf)") (:EVAL "(setf *debugger-hook* (lambda (c parent) (declare (ignore parent)) (format *error-output* \"~&Error: ~A~2%\" c) (uiop/image:print-backtrace :condition c) (uiop/image:quit -1)))") (:EVAL "(push #P\"/home/mathrick/.roswell/lisp/quicklisp/dists/quicklisp/software/qlot-20220331-git/\" asdf/system-registry:*central-registry*)") (:EVAL #<(SIMPLE-ARRAY CHARACTER (212)) (setf asdf/source-registry:*default-source-registries* (quote (asdf/source-registry:environment-source-registry asdf/source-registry:system-source-registry asdf/source-registry:system-source-registry-... {1004B68B6F}>) (:EVAL "(load #P\"/home/mathrick/.roswell/lisp/quicklisp/setup.lisp\")") (:EVAL "(uiop/package:symbol-call :ql :quickload \"qlot/distify\" :silent t)") (:EVAL "(let ((*error-output* (make-broadcast-stream))) (load (merge-pathnames #P\"setup.lisp\" #P\"/home/mathrick/Dev/clutch/.qlot/\")))") (:EVAL #<(SIMPLE-ARRAY CHARACTER (250)) (uiop/package:symbol-call :qlot/distify :distify (qlot/source/base:defrost-source (make-instance (quote qlot/source/git:source-git) :project-name "ace.core" :remote-url "https://github.com/qitab/ace.c... {1004B6960F}>) (:HOOK) (:QUIT)))) #<NULL-LEXENV>)
26: (EVAL (ROSWELL:RUN (QUOTE ((:EVAL "(require 'asdf)") (:EVAL "(setf *debugger-hook* (lambda (c parent) (declare (ignore parent)) (format *error-output* \"~&Error: ~A~2%\" c) (uiop/image:print-backtrace :condition c) (uiop/image:quit -1)))") (:EVAL "(push #P\"/home/mathrick/.roswell/lisp/quicklisp/dists/quicklisp/software/qlot-20220331-git/\" asdf/system-registry:*central-registry*)") (:EVAL #<(SIMPLE-ARRAY CHARACTER (212)) (setf asdf/source-registry:*default-source-registries* (quote (asdf/source-registry:environment-source-registry asdf/source-registry:system-source-registry asdf/source-registry:system-source-registry-... {1004B68B6F}>) (:EVAL "(load #P\"/home/mathrick/.roswell/lisp/quicklisp/setup.lisp\")") (:EVAL "(uiop/package:symbol-call :ql :quickload \"qlot/distify\" :silent t)") (:EVAL "(let ((*error-output* (make-broadcast-stream))) (load (merge-pathnames #P\"setup.lisp\" #P\"/home/mathrick/Dev/clutch/.qlot/\")))") (:EVAL #<(SIMPLE-ARRAY CHARACTER (250)) (uiop/package:symbol-call :qlot/distify :distify (qlot/source/base:defrost-source (make-instance (quote qlot/source/git:source-git) :project-name "ace.core" :remote-url "https://github.com/qitab/ace.c... {1004B6960F}>) (:HOOK) (:QUIT)))))
27: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:EVAL . "(progn #-ros.init(cl:load \"/etc/roswell/init.lisp\"))") (:EVAL . #<(SIMPLE-ARRAY CHARACTER (1160)) (ros:run '((:eval "(require 'asdf)")(:eval "(setf *debugger-hook* (lambda (c parent) (declare (ignore parent)) (format *error-output* \"~&Error: ~A~2%\" c) (uiop/image:print-backtrace :condition c) (u... {100156843F}>)))
28: (SB-IMPL::TOPLEVEL-INIT)
29: ((FLET SB-UNIX::BODY :IN SB-EXT:SAVE-LISP-AND-DIE))
30: ((FLET "WITHOUT-INTERRUPTS-BODY-14" :IN SB-EXT:SAVE-LISP-AND-DIE))
31: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))
Unhandled QLOT/UTILS/SHELL:SHELL-COMMAND-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                                            {10008B8083}>:
  Error while executing a shell command: "/usr/bin/ros" "+Q" "-L" "sbcl-bin" "-e" "(require 'asdf)" "-e" "(setf *debugger-hook* (lambda (c parent) (declare (ignore parent)) (format *error-output* \"~&Error: ~A~2%\" c) (uiop/image:print-backtrace :condition c) (uiop/image:quit -1)))" "-e" "(push #P\"/home/mathrick/.roswell/lisp/quicklisp/dists/quicklisp/software/qlot-20220331-git/\" asdf/system-registry:*central-registry*)" "-e" "(setf asdf/source-registry:*default-source-registries* (quote (asdf/source-registry:environment-source-registry asdf/source-registry:system-source-registry asdf/source-registry:system-source-registry-directory)))" "-e" "(load #P\"/home/mathrick/.roswell/lisp/quicklisp/setup.lisp\")" "-e" "(uiop/package:symbol-call :ql :quickload \"qlot/distify\" :silent t)" "-e" "(let ((*error-output* (make-broadcast-stream))) (load (merge-pathnames #P\"setup.lisp\" #P\"/home/mathrick/Dev/clutch/.qlot/\")))" "-e" "(uiop/package:symbol-call :qlot/distify :distify (qlot/source/base:defrost-source (make-instance (quote qlot/source/git:source-git) :project-name \"ace.core\" :remote-url \"https://github.com/qitab/ace.core\")) #P\"/tmp/qlot-ZYT2BV80/\" :distinfo-only nil)" (Code=255)

  ; in: LOOP FOR
;     (LET ((ASDF/USER::F NIL) (#:LOOP-LIST-653 ASDF/USER::*FILES*))
;       (DECLARE)
;       (SB-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD (#:LOOP-LIST-HEAD-654
;                                                 #:LOOP-LIST-TAIL-655)
;         (TAGBODY
;          SB-LOOP::NEXT-LOOP
;           (WHEN (ENDP #:LOOP-LIST-653) (GO SB-LOOP::END-LOOP))
;           (SB-LOOP::LOOP-DESETQ ASDF/USER::F (CAR #:LOOP-LIST-653))
;           (SB-LOOP::LOOP-DESETQ #:LOOP-LIST-653 (CDR #:LOOP-LIST-653))
;           (SB-LOOP::LOOP-COLLECT-RPLACD
;            (#:LOOP-LIST-HEAD-654 #:LOOP-LIST-TAIL-655) (LIST `#))
;           (GO SB-LOOP::NEXT-LOOP)
;          SB-LOOP::END-LOOP
;           (RETURN-FROM NIL (SB-LOOP::LOOP-COLLECT-ANSWER #:LOOP-LIST-HEAD-654)))))
; 
; caught WARNING:
;   undefined variable: ASDF/USER::*FILES*
; 
; compilation unit finished
;   Undefined variable:
;     *FILES*
;   caught 1 WARNING condition
Error: The variable *FILES* is unbound.