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.
>