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* testFun(void *arg)
{
cout<<"Iam child process \n";
sleep(2);
pthread_exit(NULL);
}
int main()
{
pthread_t threads;
int i=5;
int *p=&i;
pthread_create(&threads, NULL, testFun,(void *)&i);
cout<<"Main thread cancelling the child\n";
pthread_cancel(threads);
cout<<"waiting for child\n";
pthread_join(threads,(void**)&p);
cout<<"main thread exiting\n bye
";
}
Valgrind output:
==16040== Memcheck, a memory error detector.
==16040== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==16040== Using LibVEX rev 1732, a library for dynamic binary translation.
==16040== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==16040== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
==16040== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==16040== For more details, rerun with: -v
==16040==
Iam child process
Main thread cancelling the child
waiting for child
main thread exiting
bye
==16040==
==16040== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 21 from 1)
==16040== malloc/free: in use at exit: 28 bytes in 1 blocks.
==16040== malloc/free: 2 allocs, 1 frees, 172 bytes allocated.
==16040== For counts of detected errors, rerun with: -v
==16040== searching for pointers to 1 not-freed blocks.
==16040== checked 104,232 bytes.
==16040==
==16040== 28 bytes in 1 blocks are still reachable in loss record 1 of 1
==16040== at 0x4022525: malloc (vg_replace_malloc.c:149)
==16040== by 0x400CDD2: _dl_map_object_deps (in /lib/ld-2.7.so)
==16040== by 0x4011ECC: dl_open_worker (in /lib/ld-2.7.so)
==16040== by 0x400E1B5: _dl_catch_error (in /lib/ld-2.7.so)
==16040== by 0x4011851: _dl_open (in /lib/ld-2.7.so)
==16040== by 0x42835D1: do_dlopen (in /lib/libc-2.7.so)
==16040== by 0x400E1B5: _dl_catch_error (in /lib/ld-2.7.so)
==16040== by 0x4283784: __libc_dlopen_mode (in /lib/libc-2.7.so)
==16040== by 0x416D206: pthread_cancel_init (in /lib/libpthread-2.7.so)
==16040== by 0x4169648: pthread_cancel (in /lib/libpthread-2.7.so)
==16040== by 0x80487F4: main (test.cpp:36)
==16040==
==16040== LEAK SUMMARY:
==16040== definitely lost: 0 bytes in 0 blocks.
==16040== possibly lost: 0 bytes in 0 blocks.
==16040== still reachable: 28 bytes in 1 blocks.
==16040== suppressed: 0 bytes in 0 blocks.
I dont know where these 28 bytes are lost.
how to rectify this leak????
thanks in advance