Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DB segfault on close, close method has null pointer ?

5 views
Skip to first unread message

Tim Putz

unread,
Sep 18, 2014, 11:11:31 AM9/18/14
to
Small Berkeley DB test program:



#include <db.h>
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>

DB *db;

char dbpath[128] = "/home/v801480/C/jape.db";
char key[128] = "key";
char data[128] = "data";

int ret;

int main (int argc, char **argv) {

ret = db_create(&db, NULL, 0);
ret = db->open (db, NULL, dbpath, NULL, DB_HASH, DB_CREATE, S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP);
ret = db->put (db, NULL, (DBT *)key, (DBT *)data, DB_APPEND);
// ret = dbfile->del (db, NULL, (DBT *)key, 0);
ret = db->close(db, 0);

}



Compiled as so


gcc -g berk.c -Llibs/lib -ldb-5.3


Segfault on db->close, I think because the "close" method pointer is null (wherea the put method has legit pointer )?



20 ret = db->open (db, NULL, dbpath, NULL, DB_HASH, DB_CREATE, S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP);

(gdb) p *db

$1 = {pgsize = 0, db_append_recno = 0, db_feedback = 0, dup_compare = 0, app_private = 0x0, dbenv = 0x601010, type = 6297664,
mpf = 0x5, mutexp = 0x6023b0, fname = 0x0, dname = 0x0, open_flags = 0, fileid = '\000' <repeats 19 times>, adj_fileid = 0,
log_filename = 0x0, meta_pgno = 0, lid = 0, cur_lid = 0, associate_lid = 0, handle_lock = {off = 0, ndx = 0, gen = 0,
mode = DB_LOCK_NG}, cl_id = 0, timestamp = 0, my_rskey = {data = 0x0, size = 0, ulen = 0, dlen = 0, doff = 0, flags = 0},
my_rkey = {data = 0x0, size = 0, ulen = 0, dlen = 0, doff = 0, flags = 0}, my_rdata = {data = 0x0, size = 0, ulen = 0, dlen = 0,
doff = 0, flags = 0}, saved_open_fhp = 0x0, dblistlinks = {le_next = 0x0, le_prev = 0x0}, free_queue = {tqh_first = 0x0,
tqh_last = 0x0}, active_queue = {tqh_first = 0x0, tqh_last = 0x0}, join_queue = {tqh_first = 0x0, tqh_last = 0x0},
s_secondaries = {lh_first = 0x0}, s_links = {le_next = 0x0, le_prev = 0x0}, s_refcnt = 6299104, s_callback = 0,
s_primary = 0x601df0, api_internal = 0x0, bt_internal = 0x601e00, h_internal = 0x0, q_internal = 0x0, xa_internal = 0x0,
associate = 0, close = 0, cursor = 0, del = 0, dump = 0, err = 0, errx = 0, fd = 0, get = 0, pget = 0x602230,
get_byteswapped = 0x6022b0, get_cachesize = 0x6022e0, get_dbname = 0, get_encrypt_flags = 0x602300,
get_env = 0x7ffff7d49070 <__db_associate_pp>, get_errfile = 0x7ffff7d46470 <__db_associate_foreign_pp>,


Compiled DB stuff via the provided make (uses libtool). Could this have anything to do with it ? RHEL 2.6.32-358.11.1.el6.x86_64

Thanks,
Tim
0 new messages