Короче вот база с кладром преобразованная в sqlite3, а вот архив с кодом проекта.
Не самый красивый и правильный код, конечно.
Как воспроизвести непонятки:
1. распаковать архив с базой и проектом
2. >>
(require 'kladr)
(kladr:kladr-open-database #P"path-to-the-database")
(kladr:kladr-make-me-happy)
(kladr:draw-hierarchy-tree)
3. Попытаться быстро открыть элемент дерева пока оно еще не нариосовалось до конца. (Откроется окошко и в нем вживую будет появлятся дерево элементов).
4. теперь вы наблюдаете это
The function COMMON-LISP:NIL is undefined.
[Condition of type UNDEFINED-FUNCTION]
Restarts:
0: [RETURN-FROM-CALLBACK] GTK::RETURN-FROM-CALLBACK
1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "cl-gtk2 main thread" RUNNING {C159451}>)
Backtrace:
0: (SB-KERNEL:%COERCE-CALLABLE-TO-FUN NIL)
1: ((LAMBDA (GTK::DATA)) #.(SB-SYS:INT-SAP #X00000002))
2: ((LAMBDA (SB-ALIEN::ARGS-POINTER SB-ALIEN::RESULT-POINTER FUNCTION)) -377649361 -377649365 #<FUNCTION (LAMBDA #) {C9817F5}>)
3: ("foreign function: call_into_lisp")
4: ("foreign function: #x8053A59")
5: ("foreign function: funcall3")
6: ("foreign function: #x1100F55")
7: ("foreign function: #xB4AD1DA2")
8: ("foreign function: g_main_context_dispatch")
9: ("foreign function: #xB4AD5D08")
10: ("foreign function: g_main_loop_run")
11: ("foreign function: gtk_main")
12: ("foreign function: call_into_c")
13: (GTK:GTK-MAIN)
14: ((LAMBDA ()))
15: ((LAMBDA ()))
16: ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK407]412))
17: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
draw-hierarchy-tree рисует окошко со деревом кладра. Добавление элементов в дерево производится в паралельном потоке (bordeaux-threads), плюс когда раскрываешь элемент дерева, то в паралельном потоке заполняются его дочерние элементы (типа подгрузка элементов по требованию).
Методы вставки элементов в дерево выполняются в макросах gtk:within-main-loop-and-wait. Распарсить вывод слайма не получилось. Чето совсем не понятно из-за чего такое.