>Description:
dmalloc identifies memory leaks when using mysqlclient c library once a malloc and 
associated free have been used. Although these memory leaks are not within the 
mysqlclient library itself they are found in mainly nsswitch.c and elf libraries such 
as dl-open.c and dl-version.c that are used by the myslclient library.

>How-To-Repeat:
Consider the code:

*********************************************CODE****************************************************

#include <stdlib.h>
#include <stdio.h>
#include <mysql/mysql.h>
#include "dmalloc.h"

int main()
{
        MYSQL mysql;
        char *test;
        
        //test = malloc(sizeof(char) * 200);    

        mysql_init(&mysql);
        
mysql_real_connect(&mysql,"127.0.0.1","username","password","database",0,NULL,0);
        mysql_close(&mysql);

        //free(test);
        printf("Finished!\n");
}

*********************************************END OF 
CODE****************************************************

compiled using : "gcc mysql_mem.c -o mysql_mem -lmysqlclient -ldmalloc"

This produces no dmalloc log file *until* the malloc and free are uncommented. Then 
the following dmalloc logfile is created:

*********************************************DMALLOC 
LOG****************************************************

1034954529: 80: Dmalloc version '4.8.2' from 'http://dmalloc.com/'
1034954529: 80: flags = 0x4f47543, logfile 'test-log'
1034954529: 80: interval = 0, addr = 0, seen # = 0
1034954529: 80: starting time = 1034954528
1034954529: 80: free bucket count/bits:  109/5 34/6 31/7 15/8 8/9 3/10 1/11 1/14
1034954529: 80: basic-block 4096 bytes, alignment 8 bytes, heap grows up
1034954529: 80: heap: 0x808c000 to 0x809c000, size 65536 bytes (16 blocks)
1034954529: 80: heap checked 0
1034954529: 80: alloc calls: malloc 65, calloc 2, realloc 0, free 13
1034954529: 80: alloc calls: recalloc 0, memalign 0, valloc 0
1034954529: 80:  total memory allocated: 17169 bytes (67 pnts)
1034954529: 80:  max in use at one time: 16214 bytes (61 pnts)
1034954529: 80: max alloced with 1 call: 8192 bytes
1034954529: 80: max alloc rounding loss: 11466 bytes (41%)
1034954529: 80: max memory space wasted: 14510 bytes (34%)
1034954529: 80: final user memory space: basic 5, divided 7, 42190 bytes
1034954529: 80:  final admin overhead: basic 1, divided 3, 16384 bytes (25%)
1034954529: 80:  final external space: 0 bytes (0 blocks)
1034954529: 80: top 10 allocations:
1034954529: 80:  total-size  count in-use-size  count  source
1034954529: 80:        8540      5          64      1  ra=0x4002ee7a
1034954529: 80:        4088      1        4088      1  ra=0x40034a2b
1034954529: 80:        1024      1        1024      1  ra=0x40153408
1034954529: 80:        1008     26        1008     26  ra=0x4014e975
1034954529: 80:         728      2           0      0  ra=0x400c4571
1034954529: 80:         512      1         512      1  ra=0x4000abfd
1034954529: 80:         364      1           0      0  ra=0x400c6871
1034954529: 80:         242     15         242     15  ra=0x4014edfe
1034954529: 80:         200      1           0      0  mysql_mem.c:11
1034954529: 80:       17169     67        7214     54  Total of 20
1034954529: 80: dumping not-freed pointers changed since 0:
1034954529: 80:  not freed: '0x808e208|s1' (128 bytes) from 'ra=0x4000ebba'
1034954529: 80:  not freed: '0x808f008|s1' (1024 bytes) from 'ra=0x40153408'
1034954529: 80:  not freed: '0x8092008|s1' (8 bytes) from 'ra=0x4014e805'
1034954529: 80:  not freed: '0x8092028|s1' (15 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092048|s1' (15 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092068|s1' (14 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092088|s1' (14 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x80920a8|s1' (19 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x80920c8|s1' (15 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x80920e8|s1' (17 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092108|s1' (17 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092128|s1' (18 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092148|s1' (12 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092168|s1' (17 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092188|s1' (17 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x80921a8|s1' (18 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x80921c8|s1' (18 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x80921e8|s1' (16 bytes) from 'ra=0x4014edfe'
1034954529: 80:  not freed: '0x8092208|s1' (16 bytes) from 'ra=0x4013e76d'
1034954529: 80:  not freed: '0x8092228|s1' (8 bytes) from 'ra=0x4014e1fb'
1034954529: 80:  not freed: '0x8092248|s1' (12 bytes) from 'ra=0x4014eef3'
1034954529: 80:  not freed: '0x8094008|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094048|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094088|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x80940c8|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094108|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094148|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094188|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x80941c8|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094208|s1' (36 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094248|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094288|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x80942c8|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094308|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094348|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094388|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x80943c8|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094408|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094448|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094488|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x80944c8|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094508|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094548|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094588|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x80945c8|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094608|s1' (38 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094648|s1' (40 bytes) from 'ra=0x4014e975'
1034954529: 80:  not freed: '0x8094688|s1' (23 bytes) from 'ra=0x40007f98'
1034954529: 80:  not freed: '0x80946c8|s1' (30 bytes) from 'ra=0x4000ac0e'
1034954529: 80:  not freed: '0x8094708|s1' (23 bytes) from 'ra=0x4000ae6c'
1034954529: 80:  not freed: '0x8094748|s1' (28 bytes) from 'ra=0x4000c78e'
1034954529: 80:  not freed: '0x8095008|s1' (512 bytes) from 'ra=0x4000abfd'
1034954529: 80:  not freed: '0x8096088|s1' (64 bytes) from 'ra=0x4002ee7a'
1034954529: 80:  not freed: '0x809a008|s1' (4088 bytes) from 'ra=0x40034a2b'
1034954529: 80:  total-size  count  source
1034954529: 80:        4088      1  ra=0x40034a2b
1034954529: 80:        1024      1  ra=0x40153408
1034954529: 80:        1008     26  ra=0x4014e975
1034954529: 80:         512      1  ra=0x4000abfd
1034954529: 80:         242     15  ra=0x4014edfe
1034954529: 80:         128      1  ra=0x4000ebba
1034954529: 80:          64      1  ra=0x4002ee7a
1034954529: 80:          30      1  ra=0x4000ac0e
1034954529: 80:          28      1  ra=0x4000c78e
1034954529: 80:          23      1  ra=0x40007f98
1034954529: 80:          23      1  ra=0x4000ae6c
1034954529: 80:          16      1  ra=0x4013e76d
1034954529: 80:          12      1  ra=0x4014eef3
1034954529: 80:           8      1  ra=0x4014e1fb
1034954529: 80:           8      1  ra=0x4014e805
1034954529: 80:        7214     54  Total of 15
1034954529: 80:  unknown memory: 54 pointers, 7214 bytes
1034954529: 80: ending time = 1034954529, elapsed since start = 0:00:01
1034954529: 81: WARNING: tried to free(0) from 'ra=0x4019d9ae'
1034954529: 81: free: invalid pointer: from 'ra=0x4019d9ae'
1034954529: 81: ERROR: _chunk_free: pointer is null (err 20)

*********************************************END OF DMALLOC 
LOG****************************************************

Using gdb the memory address are resolved to the following:

*********************************************GDB ADDRESS 
RESOLUTION****************************************************

(gdb) info line *0x4019d9ae
Line 264 of "md5-crypt.c" starts at address 0x4019d9ae <free_mem+30> and ends at 
0x4019d9b8 <free_mem+40>.
(gdb) info line *0x40034a2b
No line number information available for address 0x40034a2b <my_once_alloc+107>
(gdb) info line *0x40153408
Line 109 of "../nss/getXXbyYY.c" starts at address 0x401533fe <getservbyname+314> and 
ends at 0x4015340e <getservbyname+330>.
(gdb) info line *0x4014e975
Line 514 of "nsswitch.c" starts at address 0x4014e962 <nss_parse_service_list+114>
   and ends at 0x4014e978 <nss_parse_service_list+136>.
(gdb) info line *0x4000abfd
Line 40 of "dl-object.c" starts at address 0x4000abf8 <_dl_new_object+52> and ends at 
0x4000ac00 <_dl_new_object+60>.
(gdb) info line *0x4014edfe
Line 656 of "nsswitch.c" starts at address 0x4014edf3 <nss_getline+131> and ends at 
0x4014ee01 <nss_getline+145>.
(gdb)

*********************************************END OF GDB 
STUFF****************************************************

>Fix:
        

>Submitter-Id:  <submitter ID>
>Originator:    Chris Masters
>Organization:
 
>MySQL support: none
>Synopsis:      mysqlclient c library memeory leak detected using dmalloc
>Severity:      non-critical
>Priority:      
>Category:      mysql
>Class:         sw-bug
>Release:       mysql-3.23.52 (Official MySQL RPM)
>Server: /usr/bin/mysqladmin  Ver 8.23 Distrib 3.23.52, for pc-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          3.23.52
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 4 days 21 hours 18 min 59 sec

Threads: 24  Questions: 1290615  Slow queries: 0  Opens: 75  Flush tables: 1  Open 
tables: 25 Queries per second avg: 3.056
>Environment:
        
System: Linux 2.4.7-10 #1 Thu Sep 6 17:27:27 EDT 2001 i686 unknown
Architecture: i686

Some paths:  /usr/bin/perl /usr/bin/make /usr/bin/gmake /usr/bin/gcc /usr/bin/cc
GCC: Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)
Compilation info: CC='gcc'  CFLAGS='-O6 -fno-omit-frame-pointer -mpentium'  CXX='gcc'  
CXXFLAGS='-O6 -fno-omit-frame-pointer              -felide-constructors 
-fno-exceptions -fno-rtti -mpentium'  LDFLAGS=''
LIBC: 
lrwxrwxrwx    1 root     root           13 Jul 31 11:24 /lib/libc.so.6 -> libc-2.2.4.so
-rwxr-xr-x    1 root     root      1282588 Sep  4  2001 /lib/libc-2.2.4.so
-rw-r--r--    1 root     root     27304836 Sep  4  2001 /usr/lib/libc.a
-rw-r--r--    1 root     root          178 Sep  4  2001 /usr/lib/libc.so
Configure command: ./configure --disable-shared --with-mysqld-ldflags=-all-static 
--with-client-ldflags=-all-static --with-other-libc=/usr/local/mysql-glibc 
--without-berkeley-db --without-innodb --enable-assembler --enable-local-infile 
--with-mysqld-user=mysql --with-unix-socket-path=/var/lib/mysql/mysql.sock --prefix=/ 
--with-extra-charsets=complex --exec-prefix=/usr --libexecdir=/usr/sbin 
--sysconfdir=/etc --datadir=/usr/share --localstatedir=/var/lib/mysql 
--infodir=/usr/share/info --includedir=/usr/include --mandir=/usr/share/man 
'--with-comment=Official MySQL RPM' CC=gcc 'CFLAGS=-O6 -fno-omit-frame-pointer 
-mpentium' 'CXXFLAGS=-O6 -fno-omit-frame-pointer              -felide-constructors 
-fno-exceptions -fno-rtti -mpentium' CXX=gcc


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to