Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 May 2004 00:20:09 +0300
From:      Alex Keahan <alex@hightemplar.com>
To:        "Cole" <cole@opteqint.net>, <freebsd-hackers@freebsd.org>
Subject:   Re: Pthread_create and memory issues.
Message-ID:  <200405230020.09482.alex@hightemplar.com>
In-Reply-To: <000701c44034$89dbffb0$4206000a@stalker>
References:  <000701c44034$89dbffb0$4206000a@stalker>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday 22 May 2004 10:39 pm, Cole wrote:
> Hi
>
> Ok this is just a more direct question that the thread Memory Leak.
>
> I have a program using pthread_create, and it runs fine, no compile errors
> or warnings, it all works fine, not a single issue, but it very very slowly
> uses up memory. The program creates a fixed number of threads, and after
> each one has run to completion it stores them for a while for use again if
> needed soon, else it destroys them after a specified amount of time.

Cole,

Are you certain it's not a bug in your code?

A thread's resources are not immediately released at termination, unless
the thread was created with the detachstate attribute set to
PTHREAD_CREATE_DETACHED, or if pthread_detach has been called for
its pthread_t.

An undetached thread remains in the terminated state until its identifier is
passed to pthread_join or pthread_detach.

At a minimum, a terminated thread retains its pthread_t identifier and the
return value that was returned from the thread's run function (or the value
specified in a call to pthread_exit).

To sum it up, you have three options: 

1) create your threads detached (PTHREAD_CREATE_DETACHED attribute),
2) detach them after creation (pthread_detach), or
3) join with the terminated threads to recycle them (pthread_join).

Alex Keahan




>
> Now i have tried to use ElectricFence to try track down the program, and it
> created cores all pointing round about to pthread_create.  So then i tried
> to use mpatrol, and it either doesnt even crash, or cause errors, or it
> creates a core file that is so large with so many instructions, that is
> well over 1000 instruction calls, but as far as i can see they both seem to
> be pointing to pthread_create.  With mpatrol i set
> MPATROL_OPTIONS=LEAKTABLE, but it never produces any output and crashes
> before i can even test the program. It also uses up close to 100% of the
> cpu before crashing.
>
> I was just wondering if anyone else has had any other memory debugging
> program suggestions, or has had any issues with pthread_create.
>
> If you want i can post the code or at the very least my pthread_create
> call.
>
> Thanks
> /Cole




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405230020.09482.alex>