Full_Name: Ben Schmidt Version: 2.4.10 OS: MinGW32, Mac OS X URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (124.168.9.190)
I have recently cross-compiled OpenLDAP for MinGW32 on Mac OS X. I found two bugs in the source code relating to shutdown/freeing structures.
This is the second. It relates to back-sql, which I realise is unsupported on this platform, but seems to work very nicely once this and another bugfix or two (my other posts) are made. Mind you, I have only done a small amount of testing, and don't really understand what I am doing, as I am a complete newbie to LDAP. After sending these patches I intend to embark on a reading of your Administrator's Guide to learn.
From the source code, though, I don't see why the problem would only apply to
this platform anyway. It is this:
When an SQL handle is opened, it is registered to be freed. When it is freed, however, it is not deregistered, so can easily be freed twice, particularly as to load the schemas the database connection is opened and closed. I suggest this patch to fix it (the patch looks larger than it really is as some code needed to be moved to ensure correct definition order):
diff -ru --exclude=Makefile openldap-2.4.10/servers/slapd/back-sql/sql-wrap.c openldap/servers/slapd/back-sql/sql-wrap.c --- openldap-2.4.10/servers/slapd/back-sql/sql-wrap.c 2008-02-12 10:26:48.000000000 +1100 +++ openldap/servers/slapd/back-sql/sql-wrap.c 2008-06-28 22:29:25.000000000 +1000 @@ -462,28 +462,31 @@ return LDAP_SUCCESS; }
+static void *backsql_db_conn_dummy; + +static void +backsql_db_conn_keyfree( + void *key, + void *data ) +{ + backsql_close_db_handle( (SQLHDBC)data ); +} + int backsql_free_db_conn( Operation *op, SQLHDBC dbh ) { Debug( LDAP_DEBUG_TRACE, "==>backsql_free_db_conn()\n", 0, 0, 0 );
(void)backsql_close_db_handle( dbh ); + ldap_pvt_thread_pool_setkey( op->o_threadctx, + &backsql_db_conn_dummy, (void *)SQL_NULL_HDBC, + backsql_db_conn_keyfree, NULL, NULL );
Debug( LDAP_DEBUG_TRACE, "<==backsql_free_db_conn()\n", 0, 0, 0 );
return LDAP_SUCCESS; }
-static void *backsql_db_conn_dummy; - -static void -backsql_db_conn_keyfree( - void *key, - void *data ) -{ - backsql_close_db_handle( (SQLHDBC)data ); -} - int backsql_get_db_conn( Operation *op, SQLHDBC *dbhp ) {
I could not find this issue already in your tracker.