DB2 - Problembeschreibung
Problem IC72649 | Status: Geschlossen |
MEMORY LEAK WHEN RUNNING CLI/ODBC APPLICATION THAT ALLOCATES AND FREES AN ENVIRONMENT HANDLE FOR EVERY ITERATION IN THE PROCESS. | |
Produkt: | |
DB2 CONNECT / DB2CONNCT / 970 - DB2 | |
Problembeschreibung: | |
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-Zusammenfassung: | |
**************************************************************** * USERS AFFECTED: * * Windows only. * **************************************************************** * 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 v9.7, Fixpak 4 * **************************************************************** | |
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. | |
verfügbare FixPacks: | |
DB2 Version 9.7 Fix Pack 4 for Linux, UNIX, and Windows | |
Lösung | |
Problem was first fixed in Version 9.7 Fix Pack 4 | |
Workaround | |
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. | |
Weitere Daten | |
Datum - Problem gemeldet : Datum - Problem geschlossen : Datum - der letzten Änderung: | 17.11.2010 02.05.2011 02.05.2011 |
Problem behoben ab folgender Versionen (IBM BugInfos) | |
9.7., 9.7.FP4 | |
Problem behoben lt. FixList in der Version | |
9.7.0.4 |