Valgrind shows memory leak

Scott Zhong <[email protected]> Wed, 4 Jun 2014 13:34:15 -0600
Newsgroups gmane.comp.db.unixodbc.devel
Message-ID <53D52D02E87FA04A948D9A74A7AE617C1543B26014@Eagle.Blue.Roguewave.Com>
--===============0305119074==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_53D52D02E87FA04A948D9A74A7AE617C1543B26014EagleBlueRogu_"

--_000_53D52D02E87FA04A948D9A74A7AE617C1543B26014EagleBlueRogu_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi,

    Valgrind  3.8.1 shows a memory leak in unixODBC 2.3.2 after setting SQL=
_ATTR_ODBC_CURSORS attribute to SQL_CUR_USE_ODBC and then connecting to a d=
ata source.

Testcase snippet:

...
SQLULEN attr_cur =3D SQL_CUR_USE_ODBC;
SQLSetConnectAttr (hdbc, SQL_ATTR_ODBC_CURSORS, (SQLPOINTER)(SQLLEN)attr_cu=
r, NULL);
SQLDriverConnect (hdbc, NULL, connStrIn, SQL_NTS, connStrOut, BUFFER_LEN, &=
connStrOutLen, SQL_DRIVER_NOPROMPT);
...

/>uname -srm
Linux 2.6.32-358.el6.x86_64 x86_64
/>cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
/>g++ -g -I$ODBC/include testcase_unixodbc_leak.cpp -L$ODBC/lib -lodbc -lpt=
hread
/>valgrind --leak-check=3Dfull --show-reachable=3Dno --show-possibly-lost=
=3Dno --track-origins=3Dyes --num-callers=3D50 --gen-suppressions=3Dall --x=
ml=3Dyes --xml-file=3Dtestcase.valgrind a.out

Valgrind leak entry:

<error>
  <unique>0xc1</unique>
  <tid>1</tid>
  <kind>Leak_DefinitelyLost</kind>
  <xwhat>
    <text>5,056 (64 direct, 4,992 indirect) bytes in 1 blocks are definitel=
y lost in loss record 167 of 170</text>
    <leakedbytes>5056</leakedbytes>
    <leakedblocks>1</leakedblocks>
  </xwhat>
  <stack>
    <frame>
      <ip>0x4A069EE</ip>
      <obj>/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so</obj>
      <fn>malloc</fn>
      <dir>/builddir/build/BUILD/valgrind-3.8.1/coregrind/m_replacemalloc</=
dir>
      <file>vg_replace_malloc.c</file>
      <line>270</line>
    </frame>
    <frame>
      <ip>0x127A65E5</ip>
    </frame>
    <frame>
      <ip>0x4C206BD</ip>
      <obj>/amd/packages/mdx/redhat/databases/unixodbc/x86_64-gcc4.1.2/lib/=
libodbc.so.1.0.0</obj>
      <fn>__connect_part_two</fn>
    </frame>
    <frame>
      <ip>0x4C28F74</ip>
      <obj>/amd/packages/mdx/redhat/databases/unixodbc/x86_64-gcc4.1.2/lib/=
libodbc.so.1.0.0</obj>
      <fn>SQLDriverConnect</fn>
    </frame>
    <frame>
      <ip>0x400F70</ip>
      <obj>/amd/tmp/scottz/a.out</obj>
      <fn>main</fn>
      <dir>/nfs/tmp/scottz</dir>
      <file>testcase_unixodbc_leak.cpp</file>
      <line>208</line>
    </frame>
  </stack>
  <suppression>
    <sname>insert_a_suppression_name_here</sname>
    <skind>Memcheck:Leak</skind>
    <sframe> <fun>malloc</fun> </sframe>
    <sframe> <obj>*</obj> </sframe>
    <sframe> <fun>__connect_part_two</fun> </sframe>
    <sframe> <fun>SQLDriverConnect</fun> </sframe>
    <sframe> <fun>main</fun> </sframe>
    <rawtext>
<![CDATA[
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   obj:*
   fun:__connect_part_two
   fun:SQLDriverConnect
   fun:main
}
]]>
    </rawtext>
  </suppression>
</error>

Regards,
Scott Z.

--_000_53D52D02E87FA04A948D9A74A7AE617C1543B26014EagleBlueRogu_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40"><head><meta http-equiv=3DContent-Type content=
=3D"text/html; charset=3Dus-ascii"><meta name=3DGenerator content=3D"Micros=
oft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue vli=
nk=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal>Hi,<o:p></o:p></=
p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>&nbsp;&nbs=
p;&nbsp; Valgrind &nbsp;3.8.1 shows a memory leak in unixODBC 2.3.2 after s=
etting SQL_ATTR_ODBC_CURSORS attribute to SQL_CUR_USE_ODBC and then connect=
ing to a data source.<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p><=
/p><p class=3DMsoNormal>Testcase snippet:<o:p></o:p></p><p class=3DMsoNorma=
l><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>&#8230;<o:p></o:p></p><p class=
=3DMsoNormal>SQLULEN attr_cur =3D SQL_CUR_USE_ODBC;<o:p></o:p></p><p class=
=3DMsoNormal>SQLSetConnectAttr (hdbc, SQL_ATTR_ODBC_CURSORS, (SQLPOINTER)(S=
QLLEN)attr_cur, NULL);<o:p></o:p></p><p class=3DMsoNormal>SQLDriverConnect =
(hdbc, NULL, connStrIn, SQL_NTS, connStrOut, BUFFER_LEN, &amp;connStrOutLen=
, SQL_DRIVER_NOPROMPT);<o:p></o:p></p><p class=3DMsoNormal>&#8230;<o:p></o:=
p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>/&gt;u=
name -srm<o:p></o:p></p><p class=3DMsoNormal>Linux 2.6.32-358.el6.x86_64 x8=
6_64<o:p></o:p></p><p class=3DMsoNormal>/&gt;cat /etc/redhat-release<o:p></=
o:p></p><p class=3DMsoNormal>Red Hat Enterprise Linux Server release 6.4 (S=
antiago)<o:p></o:p></p><p class=3DMsoNormal>/&gt;g++ -g -I$ODBC/include tes=
tcase_unixodbc_leak.cpp -L$ODBC/lib -lodbc -lpthread<o:p></o:p></p><p class=
=3DMsoNormal>/&gt;valgrind --leak-check=3Dfull --show-reachable=3Dno --show=
-possibly-lost=3Dno --track-origins=3Dyes --num-callers=3D50 --gen-suppress=
ions=3Dall --xml=3Dyes --xml-file=3Dtestcase.valgrind a.out<o:p></o:p></p><=
p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3DMsoNormal>Valgrind leak=
 entry:<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp;</o:p></p><p class=3D=
MsoNormal>&lt;error&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp; &lt;uniqu=
e&gt;0xc1&lt;/unique&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp; &lt;tid&=
gt;1&lt;/tid&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp; &lt;kind&gt;Leak=
_DefinitelyLost&lt;/kind&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp; &lt;=
xwhat&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;text&gt=
;5,056 (64 direct, 4,992 indirect) bytes in 1 blocks are definitely lost in=
 loss record 167 of 170&lt;/text&gt;<o:p></o:p></p><p class=3DMsoNormal>&nb=
sp;&nbsp;&nbsp; &lt;leakedbytes&gt;5056&lt;/leakedbytes&gt;<o:p></o:p></p><=
p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;leakedblocks&gt;1&lt;/leakedbloc=
ks&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp; &lt;/xwhat&gt;<o:p></o:p><=
/p><p class=3DMsoNormal>&nbsp; &lt;stack&gt;<o:p></o:p></p><p class=3DMsoNo=
rmal>&nbsp;&nbsp;&nbsp; &lt;frame&gt;<o:p></o:p></p><p class=3DMsoNormal>&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ip&gt;0x4A069EE&lt;/ip&gt;<o:p></o:p></p><=
p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;obj&gt;/usr/lib64/va=
lgrind/vgpreload_memcheck-amd64-linux.so&lt;/obj&gt;<o:p></o:p></p><p class=
=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fn&gt;malloc&lt;/fn&gt;<o:p=
></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dir&gt;/=
builddir/build/BUILD/valgrind-3.8.1/coregrind/m_replacemalloc&lt;/dir&gt;<o=
:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;file&g=
t;vg_replace_malloc.c&lt;/file&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; &lt;line&gt;270&lt;/line&gt;<o:p></o:p></p><p cla=
ss=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;/frame&gt;<o:p></o:p></p><p class=3DM=
soNormal>&nbsp;&nbsp;&nbsp; &lt;frame&gt;<o:p></o:p></p><p class=3DMsoNorma=
l>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ip&gt;0x127A65E5&lt;/ip&gt;<o:p></o:p>=
</p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;/frame&gt;<o:p></o:p></p><p=
 class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;frame&gt;<o:p></o:p></p><p class=
=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ip&gt;0x4C206BD&lt;/ip&gt;<=
o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;obj&g=
t;/amd/packages/mdx/redhat/databases/unixodbc/x86_64-gcc4.1.2/lib/libodbc.s=
o.1.0.0&lt;/obj&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp; &lt;fn&gt;__connect_part_two&lt;/fn&gt;<o:p></o:p></p><p class=
=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;/frame&gt;<o:p></o:p></p><p class=3DMso=
Normal>&nbsp;&nbsp;&nbsp; &lt;frame&gt;<o:p></o:p></p><p class=3DMsoNormal>=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ip&gt;0x4C28F74&lt;/ip&gt;<o:p></o:p></p=
><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;obj&gt;/amd/packag=
es/mdx/redhat/databases/unixodbc/x86_64-gcc4.1.2/lib/libodbc.so.1.0.0&lt;/o=
bj&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &l=
t;fn&gt;SQLDriverConnect&lt;/fn&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbs=
p;&nbsp;&nbsp; &lt;/frame&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbs=
p;&nbsp; &lt;frame&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; &lt;ip&gt;0x400F70&lt;/ip&gt;<o:p></o:p></p><p class=3DMsoNor=
mal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;obj&gt;/amd/tmp/scottz/a.out&lt;/obj=
&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;=
fn&gt;main&lt;/fn&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; &lt;dir&gt;/nfs/tmp/scottz&lt;/dir&gt;<o:p></o:p></p><p class=
=3DMsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;file&gt;testcase_unixodbc_l=
eak.cpp&lt;/file&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;&lt;line&gt;208&lt;/line&gt;<o:p></o:p></p><p class=3DMsoNormal=
>&nbsp;&nbsp;&nbsp; &lt;/frame&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp=
; &lt;/stack&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp; &lt;suppression&=
gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;sname&gt;inse=
rt_a_suppression_name_here&lt;/sname&gt;<o:p></o:p></p><p class=3DMsoNormal=
>&nbsp;&nbsp;&nbsp; &lt;skind&gt;Memcheck:Leak&lt;/skind&gt;<o:p></o:p></p>=
<p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;sframe&gt; &lt;fun&gt;malloc&lt=
;/fun&gt; &lt;/sframe&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&n=
bsp; &lt;sframe&gt; &lt;obj&gt;*&lt;/obj&gt; &lt;/sframe&gt;<o:p></o:p></p>=
<p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;sframe&gt; &lt;fun&gt;__connect=
_part_two&lt;/fun&gt; &lt;/sframe&gt;<o:p></o:p></p><p class=3DMsoNormal>&n=
bsp;&nbsp;&nbsp; &lt;sframe&gt; &lt;fun&gt;SQLDriverConnect&lt;/fun&gt; &lt=
;/sframe&gt;<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;sfra=
me&gt; &lt;fun&gt;main&lt;/fun&gt; &lt;/sframe&gt;<o:p></o:p></p><p class=
=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;rawtext&gt;<o:p></o:p></p><p class=3DMs=
oNormal>&lt;![CDATA[<o:p></o:p></p><p class=3DMsoNormal>{<o:p></o:p></p><p =
class=3DMsoNormal>&nbsp;&nbsp; &lt;insert_a_suppression_name_here&gt;<o:p><=
/o:p></p><p class=3DMsoNormal>&nbsp;&nbsp; Memcheck:Leak<o:p></o:p></p><p c=
lass=3DMsoNormal>&nbsp;&nbsp; fun:malloc<o:p></o:p></p><p class=3DMsoNormal=
>&nbsp;&nbsp; obj:*<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp; fun:__c=
onnect_part_two<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp; fun:SQLDriv=
erConnect<o:p></o:p></p><p class=3DMsoNormal>&nbsp;&nbsp; fun:main<o:p></o:=
p></p><p class=3DMsoNormal>}<o:p></o:p></p><p class=3DMsoNormal>]]&gt;<o:p>=
</o:p></p><p class=3DMsoNormal>&nbsp;&nbsp;&nbsp; &lt;/rawtext&gt;<o:p></o:=
p></p><p class=3DMsoNormal>&nbsp; &lt;/suppression&gt;<o:p></o:p></p><p cla=
ss=3DMsoNormal>&lt;/error&gt;<o:p></o:p></p><p class=3DMsoNormal><o:p>&nbsp=
;</o:p></p><p class=3DMsoNormal>Regards,<o:p></o:p></p><p class=3DMsoNormal=
>Scott Z.<o:p></o:p></p></div></body></html>=

--_000_53D52D02E87FA04A948D9A74A7AE617C1543B26014EagleBlueRogu_--

--===============0305119074==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
unixODBC-dev mailing list
[email protected]
http://mailman.unixodbc.org/mailman/listinfo/unixodbc-dev

--===============0305119074==--