![]() |
memory leak in threaded getpwuid_r() usage
Hi,
Trying to use getpwuid_r() in a threaded application. (Code is attached at the end of the message.) But in the "ps -p <PID> -o rss,size" output of the program, RSS increases by time while SIZE remains stable. Here's the (ps -p <PID> -o rss,size) output of the program: [BEGIN:output] $ ./a.out user_id = 1000, proc_id = 28583 1 700 46336 2 704 46336 .... 47 716 46332 48 716 46332 49 716 46336 50 716 46336 [END:output] And valgrind --leak-check=full output: [BEGIN:valgrind] 156 (36 direct, 120 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 9 at 0x1B90459D: malloc (vg_replace_malloc.c:130) by 0x1BA0BEE6: (within /lib/tls/libc-2.3.2.so) by 0x1BA0B788: __nss_database_lookup (in /lib/tls/libc-2.3.2.so) by 0x1DB70AFB: ??? by 0x1B9CCD4B: getpwuid_r (in /lib/tls/libc-2.3.2.so) by 0x804879A: sub_func (getpwuid.c:43) by 0x1B918B62: start_thread (in /lib/tls/libpthread-0.60.so) by 0x1B9FC189: clone (in /lib/tls/libc-2.3.2.so) 340 bytes in 5 blocks are possibly lost in loss record 8 of 9 at 0x1B904F75: calloc (vg_replace_malloc.c:175) by 0x1B8F2678: (within /lib/ld-2.3.2.so) by 0x1B8F294B: _dl_allocate_tls (in /lib/ld-2.3.2.so) by 0x1B91924A: allocate_stack (in /lib/tls/libpthread-0.60.so) by 0x1B918C54: pthread_create@@GLIBC_2.1 (in /lib/tls/libpthread-0.60.so) by 0x80488AB: main (getpwuid.c:68) [END:valgrind] I'd be so appreciated if somebody can help me to figure out the problem in the code. (Suggesting mailing lists that I can ask this problem is welcome too.) Regards. [BEGIN:getpwuid.c] #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <pwd.h> #include "pthread.h" uid_t user_id; pid_t proc_id; char cmd[128]; int iter; void print_mem_usage(void) { FILE *fp = popen(cmd, "r"); static char buf[64]; if (!fp) { fprintf(stderr, "popen() failed!\n"); return; } (void) fgets(buf, sizeof(buf), fp); fgets(buf, sizeof(buf), fp); printf("%3d %s", iter++, buf); fclose(fp); } void * sub_func(void *tmp) { int ret; size_t sz = 128; char buf[sz]; struct passwd old_pw; struct passwd *new_pw; ret = getpwuid_r(user_id, &old_pw, buf, sz, &new_pw); if (ret) fprintf(stderr, "getpwuid_r() failed! ret = %d\n", ret); pthread_exit(NULL); } int main(void) { int loop_count = 50; int thread_count = 100; pthread_t threads[thread_count]; int i, ret; user_id = getuid(); proc_id = getpid(); sprintf(cmd, "ps -p %d -o rss,size", proc_id); iter = 1; printf("user_id = %d, proc_id = %d\n", user_id, proc_id); while (loop_count--) { for (i = 0; i < thread_count; i++) { ret = pthread_create(&threads[i], NULL, sub_func, NULL); if (ret) fprintf(stderr, "pthread_create() failed! i = %d, ret = %d\n", i, ret); } for (i = 0; i < thread_count; i++) { ret = pthread_join(threads[i], NULL); if (ret) fprintf(stderr, "pthread_join() failed! i = %d, ret = %d\n", i, ret); } print_mem_usage(); } return 0; } [END:getpwuid.c] |
Re: memory leak in threaded getpwuid_r() usage
knt wrote:
> Hi, > > Trying to use getpwuid_r() in a threaded application. (Code is attached > at the end of the message.) But in the "ps -p <PID> -o rss,size" output > of the program, RSS increases by time while SIZE remains stable. > > Here's the (ps -p <PID> -o rss,size) output of the program: > [snip] Whoa. You're well outside the bounds of news:comp.lang.c (which covers the ISO standard C language). May I suggest news:comp.unix.prorammer or news:comp.os.linux.development.apps? HTH, --ag -- Artie Gold -- Austin, Texas http://goldsays.blogspot.com http://www.cafepress.com/goldsays "If you have nothing to hide, you're not trying!" |
Re: memory leak in threaded getpwuid_r() usage
Thanks so much for your warning. You're quite right. I've moved
question to comp.unix.prorammer. Regards. |
| All times are GMT. The time now is 07:20 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.