#21743 [Asn]: Driver initialization failed for handler: db3 (and db2)
| From: | helly@php.net | Date: | Fri, 31 Jan 2003 07:28:05 +0000 |
| Subject: | #21743 [Asn]: Driver initialization failed for handler: db3 (and db2) | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-31732@lists.php.net to get a copy of this message | ||
ID: 21743
Updated by: helly@php.net
Reported By: priyadi@priyadi.net
Status: Assigned
Bug Type: DBM/DBA related
Operating System: RedHat Linux 7.2
PHP Version: 4.3.0
Assigned To: helly
New Comment:
Please update: ext/dba/config.m4
This fixes some problems when linking against a specific
library version. If you do not use your systems default
db library you must not include ndbm support since that
is based on db1 which in turn is db-1.85 or based on db-x
where x is 1.85 or x >= 2.
I tried the following:
- db-3.2 (not shared) and it works.
- db-4.1.25 (shared/not shared) and it works.
- db-3.3 from system rpm (not shared) and it works.
- db-3.3 from source (shared) and it works
So i will ask sleepycat for known problems and maybe
disable shared dba in case of db-3.2.
I missed to answer your question: db libraries *can*
do file locking but we tell the library not to do so and
use our own locking.
To unalize your db4 problems: What extact version are you
using (ldd) and which config (but ldd should be enough).
Previous Comments:
------------------------------------------------------------------------
[2003-01-30 11:38:18] priyadi@priyadi.net
I also encountered segfaults with db4 compiled with
--with-db3=dir but not with db3 supplied by redhat.
------------------------------------------------------------------------
[2003-01-29 18:59:10] helly@php.net
Called my contact at Berkeley and got the link to the 3.2
version. Now i am able to reproduce a segfault...I'll look
into deeper ASAP
------------------------------------------------------------------------
[2003-01-26 23:49:22] priyadi@priyadi.net
I've tested it with db3-3.3 (RedHat 7.3) and also
experienced the same result :(.
Older berkeley db sources can be obtained from
http://rpmfind.net as SRPMSs.
I've also uploaded my binary dba.so to
http://priyadi.net/php/dba.so if that will help. It is
compiled with --with-flatfile --with-cdb --with-db3.
Compiled on a RedHat 7.2 system, and db3-3.2.9.
------------------------------------------------------------------------
[2003-01-26 08:01:02] helly@php.net
I've reconfigured my system with shared dba and db3-3.3
and cannot reproduce you results. Hopefully i can get a
copy of the db-3.2 source distrubution which is no longer
online :-(
------------------------------------------------------------------------
[2003-01-26 00:21:47] priyadi@priyadi.net
> First please try this (note the "-" after "c":
> <?
> dl("dba.so");
> $a = dba_open("test", "c-", "db3");
> ?>
It is working!
# php 2.php
Content-type: text/html
X-Powered-By: PHP/4.3.0
# ls -al test
-rw-r--r-- 1 root root 8192 Jan 26 12:34
test
# file test
test: Berkeley DB (Btree, version 8, native byte-order)
> Then please try if you can create and open an new file:
> <?
> dl("dba.so");
> $a = dba_open("test2", "n-", "db3");
> var_dump($a);
> dba_close($a);
> $b = dba_open("test2", "r-", "db3");
> var_dump($b);
> dba_close($b);
> ?>
It is working...
# php 3.php
Content-type: text/html
X-Powered-By: PHP/4.3.0
resource(1) of type (dba)
resource(2) of type (dba)
> after that: From your configure script:
> --enable-dba=shared \
> --with-gdbm \
> --with-db3 \
> --with-cdb=/usr \
> --with-flatfile \
>
> This means you cannot have db2.
> However you found a problem here: --with-cdb always
loads
> the internal cdb support (so thanks here i've fixed
> this part already in cvs).
OK, while we are at this, it seems there is another
related problem. --without-db3 (or db2, flatfile, and
others too) doesn't seem to be working. configure will
show that db3 will not be included (checking for Berkeley
DB3 support... no), but it will still be included if it
finds one on my system, and the resulting binary will not
be linked to DB3 library as shown by ldd. And
--without-flatfile (and maybe --without-cdb too) will
cause undefined symbol error but I think you already know
that :)
> Could you try (with only db3, cdb and flatfile)
> --enable-dba=shared \
> --with-db3 \
> --with-cdb \
> --with-flatfile \
Doesn't work. :(
> Maybe you could also try db4 or db4.1 versions buy
> --with-db3=/path/to/db4 for PHP 4.3 or --with-db4 for
cvs versions.
I'll get back to you later on this after I finally
finished downloading and compiling (the sql worm thing is
still wreaking havoc here)
On a side note, ext/dba from PHP 4.2.1 works (phpize'ed),
maybe because it doesn't have locking?
Oh, is it possible that BerkeleyDB has its own locking
mechanism that is conflicting with PHP's? Consider this
scenario:
- on dba_open, php locks the berkeley db file
- php then handles opening the db file to berkeley db
library
- berkeley db tries to lock the file, but since it is
already locked by php it will eventually time out
From berkeley db documentation, it seems that it does its
own locking.
http://www.sleepycat.com/docs/ref/lock/intro.html
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/21743
--
Edit this bug report at http://bugs.php.net/?id=21743&edit=1