Hi!
I was able to reproduce the hang on amd64. Attached is a backtrace,
unfortunately from an optimized build but maybe it gives someone a quick
idea what's going on.
WM
#0 __lll_lock_wait_private () at
../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:97
#1 0x00002b8ad36223f8 in _L_lock_9627 () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00002b8ad36207e1 in *__GI___libc_free (mem=0x2b8ad3928e60) at
malloc.c:3736
#3 0x00002b8ad3b6ccd2 in XS_Sane__Device_DESTROY (my_perl=<optimized out>,
cv=<optimized out>) at Sane.xs:17
#4 0x00002b8ad2c3d54f in Perl_pp_entersub (my_perl=0x146a010) at pp_hot.c:3046
#5 0x00002b8ad2bd0572 in Perl_call_sv (my_perl=0x146a010, sv=0x1675d80,
flags=45) at perl.c:2647
#6 0x00002b8ad2c43888 in S_curse (check_refcnt=1 '\001', sv=0x1624418,
my_perl=0x146a010) at sv.c:6342
#7 Perl_sv_clear (my_perl=0x146a010, orig_sv=0x1624418) at sv.c:6073
#8 0x00002b8ad2c43f72 in Perl_sv_free2 (my_perl=0x146a010, sv=0x1624418) at
sv.c:6474
#9 0x00002b8ad2c6bdb8 in Perl_leave_scope (my_perl=0x146a010, base=4) at
scope.c:900
#10 0x00002b8ad2c75d50 in Perl_pp_leaveloop (my_perl=0x146a010) at pp_ctl.c:2249
#11 0x00002b8ad2c34a06 in Perl_runops_standard (my_perl=0x146a010) at run.c:41
#12 0x00002b8ad2bd612a in S_run_body (oldscope=1, my_perl=0x146a010) at
perl.c:2350
#13 perl_run (my_perl=0x146a010) at perl.c:2268
#14 0x0000000000400ee9 in main (argc=3, argv=0x7fff667cf7e8,
env=0x7fff667cf808) at perlmain.c:120
(gdb) bt full
#0 __lll_lock_wait_private () at
../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:97
No locals.
#1 0x00002b8ad36223f8 in _L_lock_9627 () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#2 0x00002b8ad36207e1 in *__GI___libc_free (mem=0x2b8ad3928e60) at
malloc.c:3736
ignore1 = 128
ignore2 = <optimized out>
ignore3 = -512
ar_ptr = 0x2b8ad3928e60
p = 0x14982e0
#3 0x00002b8ad3b6ccd2 in XS_Sane__Device_DESTROY (my_perl=<optimized out>,
cv=<optimized out>) at Sane.xs:17
handle = 0x14982f0
sv = 0x161e740
sp = <optimized out>
ax = 1
mark = <optimized out>
items = <optimized out>
#4 0x00002b8ad2c3d54f in Perl_pp_entersub (my_perl=0x146a010) at pp_hot.c:3046
markix = 0
sp = <optimized out>
sv = 0x1675d80
gv = 0x0
cv = 0x1675d80
cx = <optimized out>
gimme = 1
hasargs = <optimized out>
#5 0x00002b8ad2bd0572 in Perl_call_sv (my_perl=0x146a010, sv=0x1675d80,
flags=45) at perl.c:2647
sp = <optimized out>
myop = {op_next = 0x0, op_sibling = 0x0, op_ppaddr = 0, op_targ = 0,
op_type = 0, op_opt = 0, op_latefree = 0, op_latefreed = 0, op_attached = 0,
op_spare = 0, op_flags = 65 'A', op_private = 0 '\000', op_first =
0x0, op_other = 0x7fff667cf370}
method_op = {op_next = 0x165cbd0, op_sibling = 0x1675d80, op_ppaddr =
0x1623f38, op_targ = 21407824, op_type = 128, op_opt = 0, op_latefree = 0,
op_latefreed = 1, op_attached = 0, op_spare = 5, op_flags = 70 'F',
op_private = 1 '\001', op_first = 0x2b8ad2c43162}
oldmark = 0
retval = 0
---Type <return> to continue, or q <return> to quit---
oldscope = 5
oldcatch = 0 '\000'
ret = <optimized out>
oldop = 0x161d680
cur_env = {je_prev = 0x7fff667cf5d0, je_buf = {{__jmpbuf =
{140734912852848, 6804210356706508014, 0, 21955016, 23448528, 21407872,
-6803910496586662674, 682522875078278382}, __mask_was_saved =
0, __saved_mask = {__val = {79, 47875266131712, 140734912853196, 0,
47875266131712, 47875261884042, 21405712, 206158430224,
140734912852976, 140734912852784, 21405712, 21636752, 21407848, 23448528,
47875249246256, 0}}}}, je_ret = 0, je_mustcatch = 0 '\000'}
#6 0x00002b8ad2c43888 in S_curse (check_refcnt=1 '\001', sv=0x1624418,
my_perl=0x146a010) at sv.c:6342
tmpref = 0x165cbd0
destructor = 0x1675d80
sp = <optimized out>
stash = 0x1623f38
#7 Perl_sv_clear (my_perl=0x146a010, orig_sv=0x1624418) at sv.c:6073
stash = <optimized out>
type = 7
sv_type_details = <optimized out>
iter_sv = <optimized out>
next_sv = <optimized out>
sv = <optimized out>
#8 0x00002b8ad2c43f72 in Perl_sv_free2 (my_perl=0x146a010, sv=0x1624418) at
sv.c:6474
No locals.
#9 0x00002b8ad2c6bdb8 in Perl_leave_scope (my_perl=0x146a010, base=4) at
scope.c:900
uv = <optimized out>
type = <optimized out>
sv = 0x148c098
value = <optimized out>
gv = <optimized out>
av = <optimized out>
hv = <optimized out>
ptr = 0x1495cd8
str = <optimized out>
i = <optimized out>
was = 0 '\000'
---Type <return> to continue, or q <return> to quit---
#10 0x00002b8ad2c75d50 in Perl_pp_leaveloop (my_perl=0x146a010) at pp_ctl.c:2249
sp = 0x146f710
cx = 0x146fb70
gimme = <optimized out>
newsp = 0x146f710
newpm = 0x0
mark = <optimized out>
#11 0x00002b8ad2c34a06 in Perl_runops_standard (my_perl=0x146a010) at run.c:41
op = <optimized out>
#12 0x00002b8ad2bd612a in S_run_body (oldscope=1, my_perl=0x146a010) at
perl.c:2350
No locals.
#13 perl_run (my_perl=0x146a010) at perl.c:2268
oldscope = 1
ret = <optimized out>
cur_env = {je_prev = 0x146a288, je_buf = {{__jmpbuf = {0,
6804212853877669102, 4198136, 140734912853984, 0, 0, -6803910496561496850,
682522877640998126}, __mask_was_saved = 0, __saved_mask =
{__val = {140733193388033, 0, 0, 47875240839408, 21419984, 0, 0, 4198136,
140734912853984, 47875238619045, 0, 21405712, 0, 21405712,
21405712, 0}}}}, je_ret = 0, je_mustcatch = 0 '\000'}
#14 0x0000000000400ee9 in main (argc=3, argv=0x7fff667cf7e8,
env=0x7fff667cf808) at perlmain.c:120
exitstatus = <optimized out>
i = <optimized out>