this sample seems to work : how did you highlight the infinite memory trouble
of your simple script ?


          use Net::FTP;use Net::SFTP;
          use File::Basename;
           use threads;
           use Thread::Semaphore;
           use Carp;

           my $semaphore = new Thread::Semaphore;
           my $GlobalVariable : shared = 0;

           $thr1 = new threads (\&sample_sub, 'ftp', 'mymachine1', 'auserx',
'apwdx', 'test.tar.Z');
           $thr2 = new threads (\&sample_sub, 'sftp', 'my2machine', 'auserx',
'apwdx', 'adummyfile.tar');
           $thr3 = new threads (\&sample_sub,
'ftp','mylastmachine','auserx','apwdx','/database/auserhome/gcc-3.2.2.tar.gz');

           sub sample_sub {
               my ($protocole, $ser, $user, $password, $filetoget) =  @_;
               $_ = $protocole;
               SWITCH : {
               /^ftp$/ && do {
                        my $ftp= Net::FTP->new($ser,Debug=>0) or die "cannot 
connect to
$ser: $@";
                       $ftp->login($user,$password) or die "cannot login",
$ftp->message;
                        $ftp->cwd(dirname ($filetoget)) or die "cannot change 
working
directory", $ftp->message;
                        $ftp->get(basename ($filetoget)) ;
                        $ftp->quit();
                        last SWITCH;
                        };
               /^sftp$/ && do {
                        my %args=(user=>$user,password=>$password);
                        my $sftp= Net::SFTP->new($ser,%args);
                        $sftp->quit();
                        last SWITCH;
                        };
               croak "Mc Donald protocol unknown $_";
               }

               my $TryCount = 10;
               my $LocalCopy;
               sleep 1;
               while ($TryCount--) {
                   $semaphore->down;
                   $LocalCopy = $GlobalVariable;
                   print "$TryCount tries left for sub $protocole, $ser, $user,
(\$GlobalVariable is $GlobalVariable)\n";
                   sleep 2;
                   $LocalCopy++;
                   $GlobalVariable = $LocalCopy;
                   $semaphore->up;
               }
           }

           $thr1->join;
           $thr2->join;
           $thr3->join;


Reply via email to