[Pkg-db-devel] Bug#353812: libdb4.4: DB_ENV->open fails with mutex error (when not using tls)

david at fries.net david at fries.net
Tue Feb 21 03:57:22 UTC 2006


Package: libdb4.4
Version: 4.4.20-2
Severity: important


I just upgraded three systems and now Berkeley Database application
will only run when using tls libraries.  When compiling it statically,
with a 2.4 kernel, or specifying to use 2.4 libaries it fails to
create a database environment.  I wrote a little program to
demonstrate this.  It takes the argument of an empty directory.

I jumped a few libdb revisions when upgrading, so I don't know what
revision broke it.

SubSpace:~/programming/c/pam_module/firewall/test$ LD_ASSUME_KERNEL=2.4 ./env_open db_dir
creating environment
verbose DB_VERB_DEADLOCK
verbose DB_VERB_RECOVERY
verbose DB_VERB_REGISTER
verbose DB_VERB_REPLICATION
verbose DB_VERB_WAITSFOR
unable to initialize mutex: Function not implemented
PANIC: Function not implemented
unable to join the environment
Error opening environment: DB_RUNRECOVERY: Fatal error, run database recovery
SubSpace:~/programming/c/pam_module/firewall/test$ ls db_dir
SubSpace:~/programming/c/pam_module/firewall/test$ ./env_open db_dir            creating environment
verbose DB_VERB_DEADLOCK
verbose DB_VERB_RECOVERY
verbose DB_VERB_REGISTER
verbose DB_VERB_REPLICATION
verbose DB_VERB_WAITSFOR
opening environment
closing environment
SubSpace:~/programming/c/pam_module/firewall/test$ ldd env_open
        linux-gate.so.1 =>  (0xffffe000)
        libdb-4.4.so => /usr/lib/libdb-4.4.so (0xb7deb000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7dd8000)
        libc.so.6 => /lib/tls/libc.so.6 (0xb7ca0000)
        /lib/ld-linux.so.2 (0xb7ef9000)
SubSpace:~/programming/c/pam_module/firewall/test$ LD_ASSUME_KERNEL=2.4 ldd env_open
        linux-gate.so.1 =>  (0xffffe000)
        libdb-4.4.so => /usr/lib/libdb-4.4.so (0xb7e8b000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7e37000)
        libc.so.6 => /lib/libc.so.6 (0xb7d13000)
        /lib/ld-linux.so.2 (0xb7f99000)

Makefile
----------------------------------------
CFLAGS=-g -Wall
LDFLAGS=-ldb -lpthread

env_open:
----------------------------------------

env_open.c
----------------------------------------
#include <db.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void error_exit(const char *msg, int result)
{
	if(!result)
	{
		printf("%s\n", msg);
		return;
	}

	fprintf(stderr, "Error %s: %s\n", msg, db_strerror(result));
	exit(1);
}

int main(int argc, char **argv)
{
	DB_ENV *db_environ;
	const char *db_home;
	if(argc<2)
	{
		fprintf(stdout, "Usage: %s <option num> db_dir\n", argv[0]);
		return 1;
	}
	db_home=argv[1];
	error_exit("creating environment", db_env_create(&db_environ, 0));
	db_environ->set_errfile(db_environ, stderr);
	error_exit("verbose DB_VERB_DEADLOCK", db_environ->set_verbose(
		db_environ, DB_VERB_DEADLOCK, 1));
	error_exit("verbose DB_VERB_RECOVERY", db_environ->set_verbose(
		db_environ, DB_VERB_RECOVERY, 1));
	error_exit("verbose DB_VERB_REGISTER", db_environ->set_verbose(
		db_environ, DB_VERB_REGISTER, 1));
	error_exit("verbose DB_VERB_REPLICATION", db_environ->set_verbose(
		db_environ, DB_VERB_REPLICATION, 1));
	error_exit("verbose DB_VERB_WAITSFOR", db_environ->set_verbose(
		db_environ, DB_VERB_WAITSFOR, 1));
	error_exit("opening environment", db_environ->open(db_environ, db_home,
		DB_CREATE | DB_INIT_CDB | DB_INIT_MPOOL, 0600));
	error_exit("closing environment", db_environ->close(db_environ, 0));
	return 0;
}
----------------------------------------


-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.14-rc3
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)

Versions of packages libdb4.4 depends on:
ii  libc6                         2.3.6-1    GNU C Library: Shared libraries an

libdb4.4 recommends no packages.

-- no debconf information




More information about the Pkg-db-devel mailing list