Hi,

In one of our projects we are using Pharo4. The image gets built by gradle, which loads the Metacello project. Sometimes, we see the build process hangs. It just don't progress.

When adding local gitfiletree:// dependencies manually through Monticello after a while Pharo gets frozen. It's not always the same repository, it's not always the same number of repositories before it hangs.

I launched the image with strace, and attached gdb to the frozen process.
It turns out It's waiting for a lock that gets never released.

The environment is a 64b Gentoo Linux with enough of everything (multiple monitors, multiple cores, enough RAM).

I hope anybody could point me how to dig deeper into this.

# gdb
(gdb) attach [pid]
[..]
Reading symbols from /usr/lib32/libbz2.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib32/libbz2.so.1
0x0809d8bb in signalSemaphoreWithIndex ()
(gdb) backtrace
#0�� 0x0809d8bb in signalSemaphoreWithIndex ()
#1�� 0x0810868c in handleSignal ()
#2�� <signal handler called>
#3�� 0x0809d8c8 in signalSemaphoreWithIndex ()
#4�� 0x0809f0af in aioPoll ()
#5�� 0xf76f9671 in display_ioRelinquishProcessorForMicroseconds () from /home/chous/realhome/toolbox/pharo-5.0/pharo-vm/vm-display-X11
#6�� 0x080a1887 in ioRelinquishProcessorForMicroseconds ()
#7�� 0x080767fa in primitiveRelinquishProcessor ()
#8�� 0xb6fc838c in ?? ()
#9�� 0xb6fc3700 in ?? ()
#10 0xb7952882 in ?? ()
#11 0xb6fc3648 in ?? ()
(gdb) disassemble
Dump of assembler code for function handleSignal:
���� 0x081085e0 <+0>:�������� sub������ $0x9c,%esp
���� 0x081085e6 <+6>:�������� mov������ %ebx,0x90(%esp)
���� 0x081085ed <+13>:������ mov������ 0xa0(%esp),%ebx
���� 0x081085f4 <+20>:������ mov������ %esi,0x94(%esp)
���� 0x081085fb <+27>:������ mov������ %edi,0x98(%esp)
���� 0x08108602 <+34>:������ movzbl 0x8168420(%ebx),%esi
���� 0x08108609 <+41>:������ mov������ %ebx,%eax
���� 0x0810860b <+43>:������ mov������ %esi,%edx
���� 0x0810860d <+45>:������ call���� 0x81070d0 <forwardSignaltoSemaphoreAt>
���� 0x08108612 <+50>:������ call���� 0x805aae0 <pthread_self@plt>
���� 0x08108617 <+55>:������ mov������ 0x8168598,%edi
���� 0x0810861d <+61>:������ cmp������ %edi,%eax
���� 0x0810861f <+63>:������ je�������� 0x8108680 <handleSignal+160>
���� 0x08108621 <+65>:������ lea������ 0x10(%esp),%esi
���� 0x08108625 <+69>:������ mov������ %esi,(%esp)
���� 0x08108628 <+72>:������ call���� 0x805b330 <sigemptyset@plt>
���� 0x0810862d <+77>:������ mov������ %ebx,0x4(%esp)
���� 0x08108631 <+81>:������ mov������ %esi,(%esp)
���� 0x08108634 <+84>:������ call���� 0x805b0c0 <sigaddset@plt>
���� 0x08108639 <+89>:������ movl���� $0x0,0x8(%esp)
���� 0x08108641 <+97>:������ mov������ %esi,0x4(%esp)
���� 0x08108645 <+101>:���� movl���� $0x0,(%esp)
���� 0x0810864c <+108>:���� call���� 0x805ada0 <pthread_sigmask@plt>
���� 0x08108651 <+113>:���� mov������ %ebx,0x4(%esp)
���� 0x08108655 <+117>:���� mov������ %edi,(%esp)
���� 0x08108658 <+120>:���� call���� 0x805b240 <pthread_kill@plt>
���� 0x0810865d <+125>:���� mov������ 0x90(%esp),%ebx
���� 0x08108664 <+132>:���� mov������ 0x94(%esp),%esi
���� 0x0810866b <+139>:���� mov������ 0x98(%esp),%edi
���� 0x08108672 <+146>:���� add������ $0x9c,%esp
���� 0x08108678 <+152>:���� ret
���� 0x08108679 <+153>:���� lea������ 0x0(%esi,%eiz,1),%esi
���� 0x08108680 <+160>:���� test���� %esi,%esi
���� 0x08108682 <+162>:���� je�������� 0x810865d <handleSignal+125>
���� 0x08108684 <+164>:���� mov������ %esi,(%esp)
���� 0x08108687 <+167>:���� call���� 0x809d8a0 <signalSemaphoreWithIndex>
=> 0x0810868c <+172>:���� jmp������ 0x810865d <handleSignal+125>
End of assembler dump.
(gdb) up 3
(gdb) disassemble
Dump of assembler code for function signalSemaphoreWithIndex:
���� 0x0809d8a0 <+0>:�������� push���� %esi
���� 0x0809d8a1 <+1>:�������� xor������ %eax,%eax
���� 0x0809d8a3 <+3>:�������� push���� %ebx
���� 0x0809d8a4 <+4>:�������� sub������ $0x24,%esp
���� 0x0809d8a7 <+7>:�������� mov������ 0x30(%esp),%esi
���� 0x0809d8ab <+11>:������ test���� %esi,%esi
���� 0x0809d8ad <+13>:������ jle������ 0x809d918 <signalSemaphoreWithIndex+120>
���� 0x0809d8af <+15>:������ mov������ $0x1,%edx
���� 0x0809d8b4 <+20>:������ lea������ 0x0(%esi,%eiz,1),%esi
���� 0x0809d8b8 <+24>:������ mfence
���� 0x0809d8bb <+27>:������ mov������ $0x0,%eax
���� 0x0809d8c0 <+32>:������ lock cmpxchg %edx,0x8152d80
=> 0x0809d8c8 <+40>:������ mov������ %eax,0x1c(%esp)
���� 0x0809d8cc <+44>:������ mov������ 0x1c(%esp),%eax
���� 0x0809d8d0 <+48>:������ test���� %eax,%eax
���� 0x0809d8d2 <+50>:������ jne������ 0x809d8b8 <signalSemaphoreWithIndex+24>
���� 0x0809d8d4 <+52>:������ mov������ 0x8152d84,%edx
���� 0x0809d8da <+58>:������ cmp������ $0x1ff,%edx
���� 0x0809d8e0 <+64>:������ lea������ 0x1(%edx),%ebx
���� 0x0809d8e3 <+67>:������ cmove�� %eax,%ebx
���� 0x0809d8e6 <+70>:������ mov������ 0x8152d88,%eax
���� 0x0809d8eb <+75>:������ cmp������ %ebx,%eax
���� 0x0809d8ed <+77>:������ je�������� 0x809d920 <signalSemaphoreWithIndex+128>
���� 0x0809d8ef <+79>:������ mov������ 0x8152d84,%eax
���� 0x0809d8f4 <+84>:������ mov������ %esi,0x8152da0(,%eax,4)
���� 0x0809d8fb <+91>:������ mfence
���� 0x0809d8fe <+94>:������ mov������ %ebx,0x8152d84
���� 0x0809d904 <+100>:���� movl���� $0x0,0x8152d80
���� 0x0809d90e <+110>:���� call���� 0x807c2c0 <forceInterruptCheck>
���� 0x0809d913 <+115>:���� mov������ $0x1,%eax
���� 0x0809d918 <+120>:���� add������ $0x24,%esp
���� 0x0809d91b <+123>:���� pop������ %ebx
���� 0x0809d91c <+124>:���� pop������ %esi
���� 0x0809d91d <+125>:���� ret
���� 0x0809d91e <+126>:���� xchg���� %ax,%ax
���� 0x0809d920 <+128>:���� movl���� $0x810c888,(%esp)
���� 0x0809d927 <+135>:���� movl���� $0x0,0x8152d80
���� 0x0809d931 <+145>:���� call���� 0x80a3720 <error>
���� 0x0809d936 <+150>:���� jmp������ 0x809d8ef <signalSemaphoreWithIndex+79>
End of assembler dump.

Meanwhile, strace gets frozen showing this:
[..]
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f63665cd9d0) = 3736
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGINT, {0x42a8a0, [], SA_RESTORER, 0x7f6365ba3ad0}, {SIG_DFL, [], SA_RESTORER, 0x7f6365ba3ad0}, 8) = 0
wait4(-1, 0x7ffc4ef7f7e8, 0, NULL)���������� = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
wait4(-1,