apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christian K." <christian.k.2...@googlemail.com>
Subject Multiple use of apr_initialize, apr_pool_create_ex and apr_dbm_open_ex
Date Mon, 23 Aug 2010 14:53:05 GMT

in a Java web application I'm using the APR dbm functionality via JNA
which translates between Java and any shared library, in my case apr
and aprutil.

In this application I want to write a dbm file, to use for HTTPD
authentication. Since I do not want to make any assumption on the
initialization state of apr I would like to repeatedly initialize and
terminate apr.
In the past this has worked quite well on win32 and Linux 32-bit. Now
the webapp is being migrated to a 64-bit Linux system. Now the old
code doesn't work anymore. I was able to reproduce the problem in a
small C program which is reproduced here:
#include <apr-1.0/apr.h>
#include <apr-1.0/apr_dbm.h>
#include <stdio.h>

int main()
    for(int i = 0; i < 2; i++)
        apr_pool_t* pool = NULL;
        apr_pool_create_ex(&pool, NULL, NULL, NULL);
        apr_dbm_t* dbm = NULL;
        apr_dbm_open_ex(&dbm, "db", "users.db", APR_DBM_RWCREATE,

    return 0;

On a 64-bit Linux machine the code crashes with a seg fault during the
second call to apr_dbm_open_ex. Additional error info:
# Problematic frame:
# C  [libpthread.so.0+0x93c4]  pthread_mutex_lock+0x4

Related to the situation described above I have a couple of questions:
- Is this an intended and valid use of apr and especially
- Might the seg fault be caused by a bug in apr?

Version info:
libapr: 1.3.8-1build1
libaprutil: 1.3.9+dfsg-3build1
uname -a: Linux www 2.6.32-22-server #36-Ubuntu SMP Thu Jun 3 20:38:33
UTC 2010 x86_64 GNU/Linux

Thanks and best regards,


View raw message