BerkeleyDB删除数据时的“内存泄漏”问题

之前用了Berkeleydb的DB_THREAD标记,于是bdb的增删查都内部带锁,但最近发现有内存泄漏的嫌疑——即使只调用bdb的del,用 free看系统剩下的内存也会越来越少,后来才发现问题:原来一旦用了DB_THREAD标记,在 db->get,db->put,db->del 时操作的DBT必须带上DB_DBT_USERMEM或DB_DBT_MALLOC,以告知bdb是用户程序来分配内存还是bdb自己来分配内存给DBT key和DBT value。
即使是del操作,也必须写清楚这个flag:

    char    buff[64];
    // buff中是要删除的key
    ....
    

    DBT tKey;
    memset(&tKey,0,sizeof(DBT));

    tKey.flags = DB_DBT_USERMEM;
    tKey.data = buff;
    tKey.size = strlen(buff);
        
    int res = m_dbp->del(m_dbp,NULL,&tKey,0);

这样就没有所谓的“内存泄漏”了。

相关文章

分类

留言:

关于文章

This page contains a single entry by DongHao published on 04 8, 2009 5:53 PM.

异步recv was the previous entry in this blog.

intel编译器试用 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.