Memory LEAK with pthreads


 
Thread Tools Search this Thread
Top Forums Programming Memory LEAK with pthreads
# 1  
Old 05-07-2009
Network Memory LEAK with pthreads

I have this code...

#include <stdio.h>
#include <iostream>
#include <pthread.h>
static void* cliente(void *datos);

int main()
{
pthread_attr_t tattr;
int ret;
size_t size = PTHREAD_STACK_MIN + 0x0100;
ret = pthread_attr_init(&tattr);
ret = pthread_attr_setstacksize(&tattr, size);
ret= pthread_attr_setdetachstate(&tattr,PTHREAD_CREATE_JOINABLE);
ret=0;
pthread_t mythread[401];
while(ret<400)
{
int error=pthread_create((pthread_t *)&mythread[ret],&tattr,cliente,NULL);
if(error==0)pthread_detach((pthread_t)mythread);

ret++;
}

while(true)
{}
}
static void* cliente(void *datos)
{
char *buff=(char *)malloc(100000);
sleep(15);
free(buff);
buff=NULL;
pthread_exit(NULL);

}
When the code finishes I can observe that the virtual memory(report) in the creation of the threads is not liberated after doing a detach, even the memory(report) reserved also...

any body knows this problem???

TIA
# 2  
Old 05-07-2009
Where and how are you checking memory usage? It is unclear from your message.
After the threads are created? After the program exits?

Some minor things are obvious. The unused pthread_t (401 v 400), and no call to pthread_attr_destroy() after creating the set of threads.
# 3  
Old 05-07-2009
I see the memory usage
Before create threads... and after detach all threads in the
"while(true)
{}" is runnig...in this point the memory will be free

There are only one attr pointer... and there are too much memory used
# 4  
Old 05-07-2009
Memory before create threads
VIRT:13556 RES: 964
Memory with pthreads create
VIRT:4649m RES:5956
Memory After thread_detach... in while(true) looping
VIRT: 4270m RES:4416

My problem is the RES memory..
# 5  
Old 05-07-2009
Running the source before creating

0000000000400000 4K r-x-- /home/CSources/samples/thread1
0000000000600000 4K rw--- /home/CSources/samples/thread1
0000003602200000 112K r-x-- /lib64/ld-2.5.so
000000360241b000 4K r---- /lib64/ld-2.5.so
000000360241c000 4K rw--- /lib64/ld-2.5.so
0000003603200000 1328K r-x-- /lib64/libc-2.5.so
000000360334c000 2048K ----- /lib64/libc-2.5.so
000000360354c000 16K r---- /lib64/libc-2.5.so
0000003603550000 4K rw--- /lib64/libc-2.5.so
0000003603551000 20K rw--- [ anon ]
0000003603600000 520K r-x-- /lib64/libm-2.5.so
0000003603682000 2044K ----- /lib64/libm-2.5.so
0000003603881000 4K r---- /lib64/libm-2.5.so
0000003603882000 4K rw--- /lib64/libm-2.5.so
0000003603e00000 88K r-x-- /lib64/libpthread-2.5.so
0000003603e16000 2044K ----- /lib64/libpthread-2.5.so
0000003604015000 4K r---- /lib64/libpthread-2.5.so
0000003604016000 4K rw--- /lib64/libpthread-2.5.so
0000003604017000 16K rw--- [ anon ]
000000360dc00000 52K r-x-- /lib64/libgcc_s-4.1.2-20080825.so.1
000000360dc0d000 2048K ----- /lib64/libgcc_s-4.1.2-20080825.so.1
000000360de0d000 4K rw--- /lib64/libgcc_s-4.1.2-20080825.so.1
000000360f400000 920K r-x-- /usr/lib64/libstdc++.so.6.0.8
000000360f4e6000 2044K ----- /usr/lib64/libstdc++.so.6.0.8
000000360f6e5000 24K r---- /usr/lib64/libstdc++.so.6.0.8
000000360f6eb000 12K rw--- /usr/lib64/libstdc++.so.6.0.8
000000360f6ee000 72K rw--- [ anon ]
00002b292036a000 8K rw--- [ anon ]
00002b2920389000 16K rw--- [ anon ]
00007fff8a72a000 84K rw--- [ stack ]
ffffffffff600000 8192K ----- [ anon ]
total 21748K

After....

0000000000400000 4K r-x-- /home/CSources/samples/thread1
0000000000600000 4K rw--- /home/CSources/samples/thread1
0000000014a24000 132K rw--- [ anon ]
0000000041ea8000 4K ----- [ anon ]
0000000041ea9000 10240K rw--- [ anon ]
00000000428a9000 4K ----- [ anon ]
00000000428aa000 10240K rw--- [ anon ]
00000000432aa000 4K ----- [ anon ]
00000000432ab000 10240K rw--- [ anon ]
0000000043cab000 4K ----- [ anon ]
0000000043cac000 10240K rw--- [ anon ]
0000003602200000 112K r-x-- /lib64/ld-2.5.so
000000360241b000 4K r---- /lib64/ld-2.5.so
000000360241c000 4K rw--- /lib64/ld-2.5.so
0000003603200000 1328K r-x-- /lib64/libc-2.5.so
000000360334c000 2048K ----- /lib64/libc-2.5.so
000000360354c000 16K r---- /lib64/libc-2.5.so
0000003603550000 4K rw--- /lib64/libc-2.5.so
0000003603551000 20K rw--- [ anon ]
0000003603600000 520K r-x-- /lib64/libm-2.5.so
0000003603682000 2044K ----- /lib64/libm-2.5.so
0000003603881000 4K r---- /lib64/libm-2.5.so
0000003603882000 4K rw--- /lib64/libm-2.5.so
0000003603e00000 88K r-x-- /lib64/libpthread-2.5.so
0000003603e16000 2044K ----- /lib64/libpthread-2.5.so
0000003604015000 4K r---- /lib64/libpthread-2.5.so
0000003604016000 4K rw--- /lib64/libpthread-2.5.so
0000003604017000 16K rw--- [ anon ]
000000360dc00000 52K r-x-- /lib64/libgcc_s-4.1.2-20080825.so.1
000000360dc0d000 2048K ----- /lib64/libgcc_s-4.1.2-20080825.so.1
000000360de0d000 4K rw--- /lib64/libgcc_s-4.1.2-20080825.so.1
000000360f400000 920K r-x-- /usr/lib64/libstdc++.so.6.0.8
000000360f4e6000 2044K ----- /usr/lib64/libstdc++.so.6.0.8
000000360f6e5000 24K r---- /usr/lib64/libstdc++.so.6.0.8
000000360f6eb000 12K rw--- /usr/lib64/libstdc++.so.6.0.8
000000360f6ee000 72K rw--- [ anon ]
00002aaaaae7f000 4K rw--- [ anon ]
00002aeeccfe5000 8K rw--- [ anon ]
00002aeecd004000 16K rw--- [ anon ]
00007fffddab0000 84K rw--- [ stack ]
ffffffffff600000 8192K ----- [ anon ]
total 62860K
# 6  
Old 05-08-2009
This simple sample.. have a memory leak.. why???

Why does reserved memory grow stillafter having liberated the threads?? .. should not it be able only like before having created them?

Begin program : VIRT:13560 RES:976
During trheads alive..: VIRT:510844 RES:1084
After Threads end: VIRT:120204 RES:1116

1116 ... Why?


#include <stdio.h>
#include <iostream>
#include <pthread.h>
static void* cliente(void *datos);

int main()
{
int ret;
pthread_t mythread[5];
printf("Pulsa una tecla para comenzar\r\n");
getchar();
while(ret<4)
{
int error=pthread_create((pthread_t *)&mythread[ret],NULL,cliente,NULL);
if(error==0)pthread_detach((pthread_t)mythread);

ret++;
}
printf("Fin.. pulsa una tecla\r\n");
getchar();
}
static void* cliente(void *datos)
{
char *buff=(char *)malloc(100000000);
sleep(15);
printf("Libero..\r\n");
free(buff);
buff=NULL;
pthread_exit(NULL);

}
# 7  
Old 05-08-2009
I am confused. Why do you think memory should be freed when you detach a thread? After all the threads still belong to the process.

What OS are you on? Which particular threads library are you using?
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Programming

Help regarding memory leak in this C program

I have written this code in C which reads a very large collection of text files and does some processing. The problem with this code is that there are memory leaks which I am not able to figure out as to where the problem is. When I run this code, and see the memory usage using top command, then I... (7 Replies)
Discussion started by: shoaibjameel123
7 Replies

2. Red Hat

Memory leak

Hi all I am using RED HAT 5.4, and i am getting memory uses problem. when i use "sync;echo 3 > /proc/sys/vm/drop_cache" command the memory will release after 2,3 hour memory show 95%. pls suggest right way. thanks (37 Replies)
Discussion started by: reply.ravi
37 Replies

3. Programming

Memory Leak

Hi, I am trying a database server which keeps a B+ plus tree structure and works on it. I am trying to find the memory used/leak while executing this process. I check the memory leak by using ps uax command. When i execute a delete query i am sure that my code frees up the existing... (9 Replies)
Discussion started by: kumaran_5555
9 Replies

4. Programming

memory leak problem

hi all Can any one plz explain me about memory leak problem Thankx (5 Replies)
Discussion started by: sonali
5 Replies

5. IP Networking

memory leak?

Hi All, my client server application can work in two modes: 1) one direction - only client sends msgs to server 2) two directions - server gives 'answers' to client. when program run in the first mode it looks OK, but when server answers to client than client's application exit its... (2 Replies)
Discussion started by: lenna
2 Replies

6. UNIX for Advanced & Expert Users

Need to create a memory leak

Hi. This might be a strange request, but does anyone have any idea on a simple shell script that would use more and more memory as it ran? Like a purposeful leak. I want to test the behaviour of an already running program when the machine runs out of memory. Thanks! (4 Replies)
Discussion started by: rebelbuttmunch
4 Replies

7. UNIX for Advanced & Expert Users

Memory leak while using pthread_cancel()

I tried to execute a sample pthread program to cancel a newly created one using pthread_cancel(). but using valgrind on my code shows some memory leak. My Code: #include "iostream" #include "unistd.h" #include "pthread.h" #include "signal.h" using namespace std; void handler(int); void*... (4 Replies)
Discussion started by: kcr
4 Replies

8. Programming

Problem with POSIX pthreads and virtual memory

Hi, i have this code... in order to test my problem... #include <stdio.h> #include <iostream> #include <pthread.h> static void* cliente(void *datos); int main() { pthread_attr_t tattr; int ret; size_t size = PTHREAD_STACK_MIN + 0x0100; ret =... (8 Replies)
Discussion started by: JEscola
8 Replies

9. Programming

about virtual memory and memory leak

Hi, First of all I appreciate this group very much for its informative discussions and posts. Here is my question. I have one process whose virtual memory size increases linearly from 6MB to 12MB in 20 minutes. Does that mean my process has memory leaks? In what cases does the... (4 Replies)
Discussion started by: shriashishpatil
4 Replies
Login or Register to Ask a Question