Thread: SQLFreeHandle() takes eons when running debug
Hey,
Not sure how this could be the PostgreSQL ODBC driver’s fault, but when I run a debug build of my application, calls to SQLFreeHandle() to free a statement can have for quite a long time (we’re talking a minute or two) before proceeding. This is Windows, 64-bit Unicode, version 9.03.03 of the PG ODBC driver. The call stack looks like this when paused:
ntdll.dll!RtlCompareMemoryUlong() + 0x10 bytes
ntdll.dll!RtlpFreeHeap() + 0x113f bytes
ntdll.dll!RtlFreeHeap() + 0x1df bytes
ntdll.dll!RtlDebugFreeHeap() + 0x23f bytes
ntdll.dll!RtlpFreeHeap() + 0x7d5b7 bytes
ntdll.dll!RtlFreeHeap() + 0x1df bytes
msvcr100.dll!free() + 0x1c bytes
psqlodbc35w.dll!00007ff97bc7c827()
[Frames below may be incorrect and/or missing, no symbols loaded for psqlodbc35w.dll]
psqlodbc35w.dll!00007ff97bc7656b()
psqlodbc35w.dll!00007ff97bc76044()
psqlodbc35w.dll!00007ff97bc761c7()
psqlodbc35w.dll!00007ff97bc88781()
psqlodbc35w.dll!00007ff97bc66bda()
odbc32.dll!FreeStmt() + 0x2c5 bytes
odbc32.dll!SQLFreeHandle() + 0x2a0 bytes
> Jmp.exe!DBContext::freeStmt(void * & hstmt=0x000000001f032030) Line 1644 + 0x14 bytes C++
Running a release build, no such delay. We don’t see anything like this for SQL Server, Oracle, DB2, Teradata, or MySQL ODBC drivers. Anyone run into this before that can suggest a fix or workaround?
Thanks,
Eric
On 12/5/14 10:56 AM, Eric Hill wrote: > Not sure how this could be the PostgreSQL ODBC driver’s fault, but when > I run a debug build of my application, calls to SQLFreeHandle() to free > a statement can have for quite a long time (we’re talking a minute or > two) before proceeding. This is Windows, 64-bit Unicode, version > 9.03.03 of the PG ODBC driver. The call stack looks like this when paused: > > ntdll.dll!RtlCompareMemoryUlong() + 0x10 bytes > > ntdll.dll!RtlpFreeHeap() + 0x113f bytes > > ntdll.dll!RtlFreeHeap() + 0x1df bytes > > ntdll.dll!RtlDebugFreeHeap() + 0x23f bytes > > ntdll.dll!RtlpFreeHeap() + 0x7d5b7 bytes > > ntdll.dll!RtlFreeHeap() + 0x1df bytes > > msvcr100.dll!free() + 0x1c bytes > > psqlodbc35w.dll!00007ff97bc7c827() > > [Frames below may be incorrect and/or missing, no > symbols loaded for psqlodbc35w.dll] > > psqlodbc35w.dll!00007ff97bc7656b() > > psqlodbc35w.dll!00007ff97bc76044() > > psqlodbc35w.dll!00007ff97bc761c7() > > psqlodbc35w.dll!00007ff97bc88781() > > psqlodbc35w.dll!00007ff97bc66bda() > > odbc32.dll!FreeStmt() + 0x2c5 bytes > > odbc32.dll!SQLFreeHandle() + 0x2a0 bytes > > > Jmp.exe!DBContext::freeStmt(void * & > hstmt=0x000000001f032030) Line 1644 + 0x14 bytes C++ > > Running a release build, no such delay. We don’t see anything like this > for SQL Server, Oracle, DB2, Teradata, or MySQL ODBC drivers. Anyone > run into this before that can suggest a fix or workaround? Perhaps this might be relevant (setting _NO_DEBUG_HEAP=1 env var to skip heap validation): http://stackoverflow.com/a/18753164 Thanks, Nikhil
That solved it! Thanks, Nikhil! Eric -----Original Message----- From: pgsql-odbc-owner@postgresql.org [mailto:pgsql-odbc-owner@postgresql.org] On Behalf Of Nikhil Deshpande Sent: Friday, December 05, 2014 2:02 PM To: pgsql-odbc@postgresql.org Subject: Re: [ODBC] SQLFreeHandle() takes eons when running debug On 12/5/14 10:56 AM, Eric Hill wrote: > Not sure how this could be the PostgreSQL ODBC driver's fault, but > when I run a debug build of my application, calls to SQLFreeHandle() > to free a statement can have for quite a long time (we're talking a > minute or > two) before proceeding. This is Windows, 64-bit Unicode, version > 9.03.03 of the PG ODBC driver. The call stack looks like this when paused: > > ntdll.dll!RtlCompareMemoryUlong() + 0x10 bytes > > ntdll.dll!RtlpFreeHeap() + 0x113f bytes > > ntdll.dll!RtlFreeHeap() + 0x1df bytes > > ntdll.dll!RtlDebugFreeHeap() + 0x23f bytes > > ntdll.dll!RtlpFreeHeap() + 0x7d5b7 bytes > > ntdll.dll!RtlFreeHeap() + 0x1df bytes > > msvcr100.dll!free() + 0x1c bytes > > psqlodbc35w.dll!00007ff97bc7c827() > > [Frames below may be incorrect and/or missing, no > symbols loaded for psqlodbc35w.dll] > > psqlodbc35w.dll!00007ff97bc7656b() > > psqlodbc35w.dll!00007ff97bc76044() > > psqlodbc35w.dll!00007ff97bc761c7() > > psqlodbc35w.dll!00007ff97bc88781() > > psqlodbc35w.dll!00007ff97bc66bda() > > odbc32.dll!FreeStmt() + 0x2c5 bytes > > odbc32.dll!SQLFreeHandle() + 0x2a0 bytes > > > Jmp.exe!DBContext::freeStmt(void * & > hstmt=0x000000001f032030) Line 1644 + 0x14 bytes C++ > > Running a release build, no such delay. We don't see anything like > this for SQL Server, Oracle, DB2, Teradata, or MySQL ODBC drivers. > Anyone run into this before that can suggest a fix or workaround? Perhaps this might be relevant (setting _NO_DEBUG_HEAP=1 env var to skip heap validation): http://stackoverflow.com/a/18753164 Thanks, Nikhil -- Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-odbc