Segmentation fault with thread
Bonjour à tous,
j'utilise le système de threads dans un gros programme Perl/Tk et à la fermeture de mon application, j'obtiens un Segmentation fault.
J'ai réussi à reproduire ce message sur un bout de programme nettement plus court et qui est très proche de ce qu'il y a dans le tutoriel sur les threads.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #!/usr/bin/perl
use strict;
use warnings;
use Tk;
use threads;
use threads::shared;
my %LesFonctions=("toto"=>\&toto);
my $ThreadTravail : shared;
my $TuerThread : shared;
my $nomFonction : shared;
my @ArgumentsThread : shared;
my $Thread = threads->create(\&MonThread);
$ThreadTravail=0;
$TuerThread=0;
my $mw = MainWindow->new;
$mw->title(" -------------- FREE ENERGY of BINDING -------------- beta version");
$mw->protocol('WM_DELETE_WINDOW' => sub{$Thread->detach();$TuerThread=1;sleep 1; exit});
$mw->Button(-text=>'toto', -command=> sub {&majThread})->pack();
MainLoop;
sub MonThread{
while (1) {
if ( $ThreadTravail == 1 ) {
$LesFonctions{$nomFonction}->(@ArgumentsThread);
$ThreadTravail = 0;
}
last if ( $TuerThread == 1 );
sleep 1;
}
return;
}
sub majThread {
$nomFonction ="toto";
@ArgumentsThread =();
$ThreadTravail = 1;
}
sub toto{
print "toto
est
content";
}
} |
En fermant la fenêtre avec la croix, le Segmentation fault apparait dans le terminal.
J'utilise Linux (GNOME 2.16.0) et la version 5.8.8 de Perl.
Merci d'avance pour vos propositions.