sábado, 10 de outubro de 2009

Mais provas, meu growisofs e o lwinstok...

Achei que depois do circuito das estações não ia correr mais nada esse ano mas.... acabei me inscrevendo para os 10KM da Samsung (troféu zumbi dos palmares), em novembro.

Tenho pouco mais de 1 mês para me preparar e tentar atingir a tão comentada meta dos 47 minutos. Vai ser osso... A altimetria da prova não mostra muitas partes planas, mas vamos lá.

Aproveitando o post, queria comentar sobre um problema que tive com meu growisofs e que resolvi com uma gambiarra bem feia, mas que funciona:

Meu problema é que, durante a gravação de um DVD (DVD-R, DVD+RW, DVD-RW) ao atingir 100% de gravação o growisofs ficava com mais de 90% de CPU e o processo nunca terminava. Ao rodar o comando strace, vi que nesse ponto ele ficava chamando constantemente a função sched_yield, que tem alguma a coisa a ver com o controle de threads. O mais engraçado é que se eu cancelar o processo no k3b ou matar o growisofs a sessão é fechada e o DVD é gravado com sucesso! :P

Bueno, baixei o código fonte do growisofs para analisar onde era feita essa chamada. Vi que isso acontecia num loop onde era testado o conteúdo da variável reader_exit e o valor de uma variável off (acredito que essa última seja um offset da qtde de blocos gravados). Vide o trecho abaixo:

while (!reader_exit && (off == highest_ecc_block))
{ if (poor_man && butlz>1.0) butlz = get_buffer_stats(ioctl_handle);
__thread_yield();
}

A variável reader_exit deveria ser setada para um valor diferente de zero na função reader (disparada como thread) mas isso nunca acontece.

Bem, resumindo, coloquei alguns printf para tentar identificar porque a thread não setava a bendita da variável. Pelo que interpretei, ele interrompeu a thread antes de chegar ao ponto de setar a reader_exit, mas é provável que eu esteja falando uma grande de uma besteira. Decidi então encerrar o growisofs no bloco de código acima (incluindo um exit(0) dentro do while ) assim consigo concluir minha gravação. Até o momento não perdi nenhum dvd... :)

De fato não é o problema real, que não acontecia quando eu usava o slack12 (growisofs 7.0). Mas não achei nada na net que pudesse solucionar o problema. Apenas coisas antigas de um outro problema que havia relacionado a isso... Vai ficar desse jeito até eu encontrar a solução verdadeira.

Por fim... Bem, vou tentar me animar em alterar o lwinstok para incluir um controle de OS bem basicão para o meu amigo. Tem tantas opções de programas de controle de OS super completos e gratuítos na NET, mas ele quer que fique junto do lwinstok só para não ter que manter a janela de outro programa aberta... Voila, hj estou com paciência e não tenho nada melhor para fazer então... vamos ver se rola.

Esse post já está grande demais. Até a próxima!

Um comentário:

  1. E vc ainda acha que ler os meus posts é que é difícil... hahahaahah...

    Estou gostando (nao entendo quase nada disto, mas estou gostando)...

    Abraço e obrigado por comentar lá!

    ResponderExcluir