DB2 - Problem description
Problem IC72564 | Status: Closed |
MEMORY LEAK WHEN RUNNING CLI/ODBC APPLICATION THAT ALLOCATES AND FREES AN ENVIRONMENT HANDLE FOR EVERY ITERATION IN THE PROCESS. | |
product: | |
DB2 CONNECT / DB2CONNCT / 950 - DB2 | |
Problem description: | |
A CLI / ODBC application can have a memory leak if the application makes the following series of calls in a loop: SQLAllocHandle (SQL_HANDLE_ENV) SQLAllocHandle (SQL_HANDLE_DBC) SQLConnect() SQLDisconnect() SQLFreeHandle (SQL_HANDLE_DBC) SQLFreeHandle (SQL_HANDLE_ENV) This can also occur if the application process spawns threads that perform those sequence of calls and multiple threads are invoked. This memory leak will only occur when the db2app.dll library is being unloaded and reloaded. When using the DB2 CLI/ODBC driver with Microsoft's ODBC driver manager, the memory leak will occur since the ODBC driver unloads db2app.dll when SQLFreeHandle (SQL_HANDLE_ENV) is called. | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * Windows * **************************************************************** * PROBLEM DESCRIPTION: * * A CLI / ODBC application can have a memory leak if the * * application makes the following series of calls in a loop: * * * * SQLAllocHandle (SQL_HANDLE_ENV) * * SQLAllocHandle (SQL_HANDLE_DBC) * * SQLConnect() * * SQLDisconnect() * * SQLFreeHandle (SQL_HANDLE_DBC) * * SQLFreeHandle (SQL_HANDLE_ENV) * * * * * * This can also occur if the application process spawns * * threads that perform those sequence of calls and multiple * * threads are invoked. * * * * This memory leak will only occur when the db2app.dll library * * is being unloaded and reloaded. When using the DB2 CLI/ODBC * * driver with Microsoft's ODBC driver manager, the memory leak * * will occur since the ODBC driver unloads db2app.dll when * * SQLFreeHandle (SQL_HANDLE_ENV) is called. * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 Version 9.5 Fixpack 8 * **************************************************************** | |
Local Fix: | |
Instead of allocating a new environment handle for each iteration, just use one environment handle. Then allocate a new connection handle for each iteration from that environment handle. If using threads, allocate the environment handle in the main thread, and allocate the connection handles in the child thread. | |
available fix packs: | |
DB2 Version 9.5 Fix Pack 8 for Linux, UNIX, and Windows | |
Solution | |
First fixed in DB2 UDB Version 9.5, Fixpack 8 | |
Workaround | |
see Local Fix | |
BUG-Tracking | |
forerunner : APAR is sysrouted TO one or more of the following: IC72649 IC72650 follow-up : | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 12.11.2010 07.07.2011 07.07.2011 |
Problem solved at the following versions (IBM BugInfos) | |
9.5.FP8 | |
Problem solved according to the fixlist(s) of the following version(s) | |
9.5.0.8 |