2008/6/11 Jerry D. Hedden <[EMAIL PROTECTED]>: > 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. >> >
Hi, I aply this changes, but now I obtein a fatal error: *** glibc detected *** double free or corruption (!prev): 0x08fea490 *** And the process is cancel :( Any idea? -- A greeting, Javier.