On Wed, Jun 11, 2008 at 9:26 AM, Javier Terceiro <[EMAIL PROTECTED]> wrote: > Hello list, > > I am designed a new software. I am using threads. The operation is > correct, but memory consumption is excessive. The system is using 100 > MB and when the software is working, 500 Mb. The memory is not > released, why?
You need to either join the threads after they're done working, or else detach them. See below. > > The source code is: > > ----------------------------------------------------------------------------- > > #!/usr/bin/perl -w > > use strict; > use warnings; > use AnyData; > use Sys::Syslog; > use Sys::Syslog qw(:DEFAULT setlogsock); > use Sys::Syslog qw(:standard :macros); > use POSIX qw(setsid); > use threads; > use threads::shared; > > sub mail > { > print ("The mail thread\n"); > return 0; > } > > sub mf > { > print ("The mf thread\n"); > return 0; > } > > sub scan_files > { > while(1) > { > foreach (readdir(DIRHANDLE)) > { > if (!-d $_) > { > my $opt = > choose_file_option("workq/",$_,"Delivered"); > switch ($opt) > { > case "mail" > { > threads->new(\&mail, $_); threads->new(\&main, $_)->detach(); > } > case "mf" > { > threads->new(\&mf, $_); threads->new(\&mf, $_)->detach(); > } > else > { > syslog ('daemon|info', > "Send mail. Failure detected"); > } > } > } > } > sleep(60); > } > } > > sub daemon > { > chdir "/"; > open STDIN, '/dev/null'; > open STDOUT, '>/dev/null'; > open STDERR, '>/dev/null'; > fork && exit; > setsid(); > if (open PID, '>', '/var/run/program.pid') > { > print PID "$$\n"; > close PID; > } > } > > setlogmask( LOG_MASK($Fax::Config::param{'log_info'}) ); > openlog 'faxqr', 'pid', LOG_DAEMON; > daemon(); > > $SIG{"TERM"} = \¬ify_exit; > > scan_files(); > > ----------------------------------------------------------------------------- > > Any idea that there is a very high consumption of memory. > > -- > A greeting, > > Javier. >