Pergunta

Eu estou tentando compilar Ruby 1.9.1-p0 no HP-UX. Depois de uma pequena alteração para ext / pty.c ele compila com sucesso, embora com um muito de mensagens de aviso (cerca de 5K). Quando eu executar os auto-testes usando "make test" ele trava e core-despeja com o seguinte erro:

sendsig: useracc falhou. 0x9fffffffbf7dae00 0x00000000005000

Pid 3044 foi morto devido a uma falha ao escrever o contexto sinal -. Possível estouro de pilha

Instrução inválida

De pesquisando este problema a instrução ilegal é apenas um sinal de que os usos do sistema para matar o processo, e não relacionado com o problema. Parece que há um problema com a re-estabelecer o contexto ao chamar o manipulador de sinal. Trazendo o núcleo em gdb não mostra uma pilha particularmente profundo, então eu não acho que o "possível estouro de pilha" é a correcta.

Os gdb pilha backtrace olhares saída como esta:

#0  0xc00000000033a990:0 in __ksleep+0x30 () from /usr/lib/hpux64/libc.so.1
#1  0xc0000000001280a0:0 in __mxn_sleep+0xae0 ()
    from /usr/lib/hpux64/libpthread.so.1
#2  0xc0000000000c0f90:0 in <unknown_procedure> + 0xc50 ()
    from /usr/lib/hpux64/libpthread.so.1
#3  0xc0000000000c1e30:0 in pthread_cond_timedwait+0x1d0 ()
    from /usr/lib/hpux64/libpthread.so.1
Foi útil?

Solução

Respondendo a minha própria pergunta:

O problema era que a pilha que está sendo atribuído era muito pequeno. Então, ele realmente foi um estouro de pilha. A função sendsig () foi a preparação de uma estrutura de quadro para ser copiado do espaço de núcleo ao espaço do usuário. O useracc () função verifica que não há espaço suficiente no endereço especificado para fazê-lo.

O código 1.9.1-p0 Rubi estava usando PTHREAD_STACK_MIN para alocar a pilha para todos os tópicos criados. De acordo com a documentação do HP-UX, em Itanium este é 256KB, mas quando eu chequei os arquivos de cabeçalho, foi apenas 4KB. A mensagem de erro a partir useracc () indicou que estava tentando copiar 20KB.

Então, se um fio recebeu um sinal, ele não tem espaço suficiente para receber o contexto sinal em seu stack.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top