Bug#696757: ecl: FTBFS: hang in sigsuspend
Christoph Egger
christoph at debian.org
Wed Dec 26 20:42:47 UTC 2012
Code in question:
#if defined(ECL_THREADS) && defined(HAVE_SIGPROCMASK)
static cl_object
asynchronous_signal_servicing_thread()
{
sigset_t handled_set;
cl_object signal_code;
int signo;
int interrupt_signal = 0;
if (ecl_get_option(ECL_OPT_TRAP_INTERRUPT_SIGNAL)) {
interrupt_signal = ecl_get_option(ECL_OPT_THREAD_INTERRUPT_SIGNAL);
}
/*
* We wait here for all signals that are blocked in all other
* threads. It would be desirable to be able to wait for _all_
* signals, but this can not be done for SIGFPE, SIGSEGV, etc.
*/
pthread_sigmask(SIG_SETMASK, NULL, &handled_set);
/*
* Under OS X we also have to explicitely add the signal we
* use to communicate process interrupts. For some unknown
* reason those signals may get lost.
*/
if (interrupt_signal) {
sigaddset(&handled_set, interrupt_signal);
pthread_sigmask(SIG_SETMASK, &handled_set, NULL);
}
CL_CATCH_ALL_BEGIN(ecl_process_env()) {
for (;;) {
/* Waiting may fail! */
int status = sigwait(&handled_set, &signo);
if (status == 0) {
if (interrupt_signal == signo)
goto RETURN;
signal_code = call_handler(lisp_signal_handler, signo,
NULL, NULL);
if (!Null(signal_code)) {
mp_process_run_function(3, @'si::handle-signal',
@'si::handle-signal',
signal_code);
}
}
}
} CL_CATCH_ALL_END;
RETURN:
@(return)
}
#endif
Christoph Egger <christoph at debian.org> writes:
> Package: src:ecl
> Version: 11.1.1+dfsg1-1
> Severity: serious
> Tags: sid wheezy
> User: debian-bsd at lists.debian.org
> Usertags: kfreebsd
> X-Debbugs-Cc: debian-bsd at lists.debian.org
> Justification: fails to build from source (but built successfully in the past)
>
> Hi!
>
> ECL build hangs early in ecl_min compile. It can be made going further
> by pressing C-c repeatedly. I'm open for any -bsd hints!
>
>> head -8 config.log | tail -6 >> build-stamp
>> cp /home/christoph/debian/ecl-stable/src/../contrib/unicode/ucd.dat .
>> if [ -f CROSS-COMPILER ]; then \
>> ./CROSS-COMPILER compile; \
>> else \
>> ECLDIR=`pwd`/ ./ecl_min compile; \
>> fi
>> ;*** Lisp core booted ****
>> ECL (Embeddable Common Lisp)
>
>> ;;;
>> ;;; Welcome to bare.lsp. Let's bring this instance up!
>> ;;;
>> ;;;
>> ;;; About to load lsp/load.lsp
>> ;;;
>> ;;; Loading src:lsp;export.lsp
>> ;;; Loading src:lsp;defmacro.lsp
>
>
> (gdb) bt full
> #0 0x0000000801651d51 in sigsuspend () at ../sysdeps/unix/syscall-template.S:82
> No locals.
> #1 0x0000000800f865a7 in __pthread_sigwait (set=0x801b6bd40, sig=<optimized out>) at signals.c:184
> self = 0x718660
> mask = {{__sigbits = {4294967293, 4294967294, 4294967263, 4294967295}, __bits = {4294967293,
> 4294967294, 4294967263, 4294967295}}}
> s = 129
> jmpbuf = {{__jmpbuf = {129, 2203319721905204293, 34388491584, 34388491472, 34388491440,
> 34388491452, 2203318780326947909, 2203316146205862981}, __mask_was_saved = 1, __saved_mask = {
> {__sigbits = {2147483650, 0, 32, 0}, __bits = {2147483650, 0, 32, 0}}}}}
> sa = {__sigaction_handler = {sa_handler = 0x800f88d50 <__pthread_null_sighandler>,
> sa_sigaction = 0x800f88d50 <__pthread_null_sighandler>}, sa_flags = 0, sa_mask = {{__sigbits = {
> 4294967295, 4294967295, 4294967295, 4294967295}, __bits = {4294967295, 4294967295,
> 4294967295, 4294967295}}}}
> #2 0x00000000004598ef in asynchronous_signal_servicing_thread ()
> at /home/christoph/debian/ecl-stable/src/c/unixint.d:917
> status = <optimized out>
> __the_env = 0x8006df000
> handled_set = {{__sigbits = {2147483650, 0, 32, 0}, __bits = {2147483650, 0, 32, 0}}}
> signal_code = <optimized out>
> signo = 0
> interrupt_signal = <optimized out>
> #3 0x0000000000411517 in cl_apply (narg=<optimized out>, fun=0x73f880, lastarg=<optimized out>)
> at /home/christoph/debian/ecl-stable/src/c/eval.d:163
> out = <optimized out>
> i = <optimized out>
> frame_aux = {t = 33 '!', m = -32 '\340', padding1 = -11 '\365', padding2 = 0 '\000',
> stack = 0xdcb000, base = 0xdcb008, size = 0, env = 0x8006df000}
> frame = 0x801b6bda0
> the_env = <optimized out>
> args = {{args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x801b6beb0,
> reg_save_area = 0x801b6bdd0}}, sp = 0x0, narg = 0}}
> #4 0x0000000000469e74 in thread_entry_point (arg=0x7056c0)
> at /home/christoph/debian/ecl-stable/src/c/threads/process.d:179
> __the_env = 0x8006df000
> _buffer = {__routine = 0x469fb0 <thread_cleanup>, __arg = 0x7056c0, __canceltype = 4627632,
> __prev = 0x801b6bf20}
> process = 0x7056c0
> env = 0x8006df000
> #5 0x0000000800d54729 in GC_inner_start_routine () from /usr/lib/libgc.so.1
> No symbol table info available.
> #6 0x0000000800d50348 in GC_call_with_stack_base () from /usr/lib/libgc.so.1
> No symbol table info available.
> #7 0x0000000800f83c4a in pthread_start_thread (arg=<optimized out>) at manager.c:317
> self = 0x718660
> request = {req_thread = 0x0, req_kind = REQ_CREATE, req_args = {create = {attr = 0x0, fn = 0,
> arg = 0x0, mask = {{__sigbits = {0, 0, 0, 0}, __bits = {0, 0, 0, 0}}}}, free = {
> thread_id = 0}, exit = {code = 0}, post = 0x0, for_each = {fn = 0, arg = 0x0}}}
> outcome = <optimized out>
> #8 0x0000000000000000 in ?? ()
> No symbol table info available.
> (gdb) info threads
> Id Target Id Frame
> * 1 process 15107 0x0000000801651d51 in sigsuspend () at ../sysdeps/unix/syscall-template.S:82
>
>
> Regards
>
> Christoph
--
More information about the pkg-common-lisp-devel
mailing list