[SP-pm] Ajuda com threads (Segmentation fault)

Ricardo Pichler ricardo em pichler.com.br
Quarta Janeiro 31 08:11:15 PST 2007


Caros,
Estou precisando de uma ajuda em um script que estou fazendo, usando
threads! Não estou conseguindo ter uma resposta satisfatória e
aparentemente o script ta ok segundo as diversas informações que li em
algumas pesquisas.

O problema é que o mesmo script, hora roda sem nenhum problema, hora
da a mensagem "Segmentation fault".

Segue o script:
#!/usr/bin/perl
use warnings;
use threads;
use threads::shared;

#Array grande só pra diversificar e simular várias situações
@arr = ('http://geocities.com/photos_shots/images/tart.jpg',
'http://img.photobucket.com/albums/v350/Prica_olandim/Macro/5.jpg',
'http://img14.imageshack.us/img14/4549/flor1.jpg',
'http://img16.imageshack.us/img16/7938/Foto_0578mod.jpg',
'http://img25.imageshack.us/img25/3489/Abelha.jpg',
'http://img26.photobucket.com/albums/v78/kavoo/fotos/marcenaria-360.jpg',
'http://img30.photobucket.com/albums/v89/calazans/bichos/dscf1413b.jpg',
'http://img31.photobucket.com/albums/v93/flying_horse/Macro/Chuva_na_Janela_02.jpg',
'http://img34.imageshack.us/img34/8205/DSC00638.jpg',
'http://img39.exs.cx/img39/943/Ibirapuera_2f.jpg',
'http://img4.photobucket.com/albums/v111/joao_neto_pb/DSC03413.jpg',
'http://img44.photobucket.com/albums/v135/kdudias/semzoom.jpg',
'http://img45.photobucket.com/albums/v139/broering/insetos/insetos12.jpg',
'http://img48.exs.cx/img48/9900/redant2.jpg',
'http://img52.photobucket.com/albums/v158/giordani/Animais/Tucano.jpg',
'http://img62.exs.cx/img62/873/Fortim-VistadaVaranda.jpg',
'http://img75.photobucket.com/albums/v229/quaninx/Arquitetura/catedral_se_5.jpg',
'http://img78.photobucket.com/albums/v290/marcosjose000/DSC00569b.jpg',
'http://img8.imageshack.us/img8/3985/SP2.jpg',
'http://karsh-i.usefilm.com/1/7/5/8/1758/450281-large.jpg',
'http://www.1_real.blogger.com.br/Angra640.jpg',
'http://www.fotosdoseventos.kit.net/fotos/sampa2pan.jpg',
'http://www.julioas.kit.net/postagem/imagem_188.jpg',
'http://www.marcelomanera.correiovip.com.br/olho_640.jpg',
'http://www.steves-digicams.com/2003_reviews/sony_v1/samples/DSC00101.jpg',
'http://www.vrcm.hpg.ig.com.br/bike.jpg');

#esse for até 99 é para que o erro aconteça, pois como disse, não é
toda hora que o erro acontece
for ( $j=0 ; $j < 100; $j++ )
{
  for ( $i=0 ; $i <= $#arr ; $i ++ )
  {
    $th[$i] = threads->new(\&validateImage, $arr[$i]);
  }
  for ( $i=0 ; $i <= $#arr ; $i ++ )
  {
    $th[$i]->join();
  }
}

sub validateImage()
{
  $img = @_[0];
  print `/usr/bin/curl --max-time 5 --head '$img' 2> /dev/null|grep
'Content-Type'|awk '{print \$2}'`;
}

1;


O script aqui postado é bem simples e retrata o problema que estou
tendo, o codigo original faz uma série de validações baseadas na
resposta do header devolvido pela chamada ao curl.

A versão do perl que estou usando:
v5.8.8 built for i486-linux-gnu-thread-multi

Se alguém puder me ajudar, até mesmo como fazer um debug melhor,
ficarei bastante grato.

Abração,
Pichler


Mais detalhes sobre a lista de discussão SaoPaulo-pm