This came from the test suite of the Perl Firebird driver, DBD::Firebird, but I am able to reproduce it with plain isql, so the problem seems to be somewhere else -- either Firebird or libc.
Firebird is 2.5.1.26351 from the Debian package, running on unstable. Embedded server. The rest of DBD::Firebird test suite (not involving parallel connections) runs fine. On other architecture the whole test suite completes without errors. At first I thought that the problem is in atomic-ops, whose substitution for hardware-based atomic operations using semaphores is buggy, but one of the failing architectures is ia64, and looking at the atomic-ops sources it seems there is a native implementation for ia64 :/ What is observed: # session 1 $ FIREBIRD=. FIREBIRD_LOCK=. isql-fb dbd-firebird-test.fdb Database: dbd-firebird-test.fdb SQL> # session 2, from another terminal, running in the same working # directory FIREBIRD=. FIREBIRD_LOCK=. isql-fb dbd-firebird-test.fdb # hangs Attaching gdb to the second session's isql and requesting a backtrace gives the following: Thread 4 (Thread 0x42333450 (LWP 3876)): #0 0x4065bc6c in __new_sem_wait (sem=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/sem_wait.c:60 #1 0x40330444 in Firebird::SignalSafeSemaphore::enter (this=0x400341f8) at ../src/common/classes/semaphore.cpp:95 #2 0x4007d51c in (anonymous namespace)::shutdownThread () at ../src/jrd/why.cpp:933 #3 0x40078f20 in run (this=<synthetic pointer>) at ../src/jrd/ThreadStart.cpp:128 #4 (anonymous namespace)::threadStart (arg=<optimized out>) at ../src/jrd/ThreadStart.cpp:139 #5 0x40653ac0 in start_thread (arg=<optimized out>) at pthread_create.c:306 #6 0x4073602c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:113 from /lib/arm-linux-gnueabi/libc.so.6 #7 0x4073602c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:113 from /lib/arm-linux-gnueabi/libc.so.6 Backtrace stopped: previous frame identical to this frame (corrupt stack?) Thread 3 (Thread 0x42e03450 (LWP 3877)): #0 0x4065bf1c in sem_timedwait (sem=0x425e7078, abstime=0x42e02d78) at ../nptl/sysdeps/unix/sysv/linux/sem_timedwait.c:88 #1 0x40330520 in Firebird::SignalSafeSemaphore::tryEnter (this=0x425e7078, seconds=<optimized out>, milliseconds=<optimized out>) at ../src/common/classes/semaphore.cpp:132 #2 0x40240948 in Jrd::ConfigStorage::touchThreadFunc (this=0x425e36c8) at ../src/jrd/trace/TraceConfigStorage.cpp:338 #3 0x402409f8 in Jrd::ConfigStorage::touchThread (arg=0x425e36c8) at ../src/jrd/trace/TraceConfigStorage.cpp:321 #4 0x40078f20 in run (this=<synthetic pointer>) at ../src/jrd/ThreadStart.cpp:128 #5 (anonymous namespace)::threadStart (arg=<optimized out>) at ../src/jrd/ThreadStart.cpp:139 #6 0x40653ac0 in start_thread (arg=<optimized out>) at pthread_create.c:306 #7 0x4073602c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:113 from /lib/arm-linux-gnueabi/libc.so.6 #8 0x4073602c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:113 from /lib/arm-linux-gnueabi/libc.so.6 Backtrace stopped: previous frame identical to this frame (corrupt stack?) Thread 2 (Thread 0x4379c450 (LWP 3878)): #0 __pthread_cond_wait (cond=0x42f9c750, mutex=<optimized out>) at pthread_cond_wait.c:156 #1 0x40193200 in ISC_event_wait (event=0x42f9c730, value=<optimized out>, micro_seconds=0) at ../src/jrd/isc_sync.cpp:1290 #2 0x402bf2ac in Jrd::LockManager::blocking_action_thread (this=0x4002e778) at ../src/lock/lock.cpp:1568 #3 0x402c3304 in Jrd::LockManager::blocking_action_thread ( arg=<optimized out>) at ../src/lock/../lock/lock_proto.h:402 #4 0x40078f20 in run (this=<synthetic pointer>) at ../src/jrd/ThreadStart.cpp:128 #5 (anonymous namespace)::threadStart (arg=<optimized out>) at ../src/jrd/ThreadStart.cpp:139 #6 0x40653ac0 in start_thread (arg=<optimized out>) at pthread_create.c:306 #7 0x4073602c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:113 from /lib/arm-linux-gnueabi/libc.so.6 #8 0x4073602c in ?? () at ../ports/sysdeps/unix/sysv/linux/arm/nptl/../clone.S:113 from /lib/arm-linux-gnueabi/libc.so.6 Backtrace stopped: previous frame identical to this frame (corrupt stack?) Thread 1 (Thread 0x40021100 (LWP 3875)): #0 0x40659afc in __pthread_cond_timedwait (cond=0x42ea07f8, mutex=<optimized out>, abstime=0xbeeb78d8) at pthread_cond_timedwait.c:168 #1 0x401931d8 in ISC_event_wait (event=0x42ea07d8, value=<optimized out>, micro_seconds=1000000) at ../src/jrd/isc_sync.cpp:1270 #2 0x402c1568 in Jrd::LockManager::wait_for_request (this=0x4002e778, tdbb=0x4ec15ec2, request=<optimized out>, lck_wait=<optimized out>) at ../src/lock/lock.cpp:3998 #3 0x402c1fe4 in Jrd::LockManager::grant_or_que (this=0x4002e778, tdbb=<optimized out>, request=0x42ea0830, lock=<optimized out>, lck_wait=-1) at ../src/lock/lock.cpp:2295 #4 0x402c22c8 in Jrd::LockManager::enqueue (this=0x4002e778, tdbb=0xbeeb8328, prior_request=<optimized out>, parent_request=<optimized out>, series=1, value=0x425fa874 "\001\376", length=16, type=4 '\004', ast_routine= 0x40127430 <CCH_down_grade_dbb(void*)>, ast_argument=0x426010c0, data=0, lck_wait=-1, owner_offset=22408) at ../src/lock/lock.cpp:566 #5 0x401ae12c in enqueue (wait=-1, level=4, lock=0x425fa830, tdbb=0xbeeb8328) at ../src/jrd/lck.cpp:906 #6 ENQUEUE (wait=-1, level=4, lock=0x425fa830, tdbb=0xbeeb8328) at ../src/jrd/lck.cpp:144 #7 LCK_lock (tdbb=0xbeeb8328, lock=0x425fa830, level=<optimized out>, wait=<optimized out>) at ../src/jrd/lck.cpp:617 #8 0x40194de4 in init_database_lock (tdbb=0xbeeb8328) at ../src/jrd/jrd.cpp:4923 #9 0x401a51d4 in jrd8_attach_database (user_status=0x6503c, filename=0xbeeb87e0 "dbd-firebird-test.fdb", handle=0xbeeb8938, dpb_length=<optimized out>, dpb=0xbeeb897c "\001M") at ../src/jrd/jrd.cpp:999 #10 0x40089a64 in isc_attach_database (user_status=<optimized out>, file_length=<optimized out>, file_name=<optimized out>, public_handle=0x1, dpb_length=0, dpb=0xbeeb8bf0 "\001\214\353\276܌\353\276\310M\002@i\315i") at ../src/jrd/why.cpp:1488 #11 0x0001cbbc in newdb (dbname=0x62e3c "dbd-firebird-test.fdb", usr=<optimized out>, psw=<optimized out>, numbufs=<optimized out>, sql_role_nm=0x64edc "", start_user_trans=true) at ../temp/std/isql/isql.cpp:7333 #12 0x0002307c in do_isql () at ../temp/std/isql/isql.cpp:4991 #13 0x000263bc in ISQL_main (argc=2, argv=<optimized out>) at ../temp/std/isql/isql.cpp:986 #14 0x40683664 in __libc_start_main (main=<optimized out>, argc=<optimized out>, ubp_av=<optimized out>, init=<optimized out>, fini=0x46740 <__libc_csu_fini>, rtld_fini=0xed50 <_start+44>, stack_end=0xbeebe844) at libc-start.c:228 #15 0x0000ed50 in _start () I hope this brings some ideas about what might be wrong. ------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel