[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#509240: libmdbodbc: can't close database connection

Package: libmdbodbc
Severity: important
Tags: patch

When used with libmdbodbc, no unixODBC based disconnection function will actually close a database connection. This means the following PHP code (supported by a well-configured odbc.ini etc.) will return rows instead of dying with an error:

$db = odbc_connect('Northwind', null, null);


$sql = "SELECT CompanyName, PostalCode, Country FROM Suppliers";
$result=odbc_exec($db, $sql) or die('ERROR: Cannot execute query!');

This bug is less terrible when libmdbodbc is used with scripts that reliably terminate, but by watching lsof I found that it led apache2 to spawn abnormally long-lived children and thus constituted a memory leak. Yes, I run an apache based site that talks to an Access database.

Besides the poor design decisions I have to support, this bug warrants attention as Zend itself recommends that libmdbodbc be used.

The following patch has solved the problem for me:

--- odbc.c      2008-12-15 13:35:35.280274615 -0800
+++ odbc.c      2008-12-15 13:37:19.415771536 -0800
@@ -711,7 +711,10 @@
     SQLHDBC            hdbc)
-       TRACE("SQLDisconnect");
+       struct _hdbc *dbc = (struct _hdbc *) hdbc;
+       struct _henv *env = (struct _henv *) dbc->henv;
+       mdb_sql_close(env->sql);
        return SQL_SUCCESS;

-- System Information:
Debian Release: lenny/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)

Kernel: Linux 2.6.24-etchnhalf.1-486
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages libmdbodbc depends on:
ii  libc6        2.7-15                      GNU C Library: Shared libraries
ii  libglib2.0-0 2.16.6-1                    The GLib library of C routines
ii  libmdbtools mdbtools libraries
ii  odbcinst1deb 2.2.11-16                   Support library and helper program

libmdbodbc recommends no packages.

libmdbodbc suggests no packages.

-- no debconf information

Reply to: