[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#9037) observing crash in mdb_cursor_put()
- To: openldap-its@OpenLDAP.org
- Subject: Re: (ITS#9037) observing crash in mdb_cursor_put()
- From: hyc@symas.com
- Date: Wed, 19 Jun 2019 16:55:14 +0000
- Auto-submitted: auto-generated (OpenLDAP-ITS)
myk@mykzilla.org wrote:
> hyc@symas.com wrote on 2019-06-18 01:30:
>> There is no issue with mdb_cursor_put then. The question is why didn't mdb_page_search find the DBI's root node?
> Would it be useful for mdb_cursor_init to return the result code of
> mdb_page_search, and for mdb_put to then return that code if it isn't
> MDB_SUCCESS?
Maybe. For testing purposes you could try something like this
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 692feaa38b..e41f3bc36a 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -7620,7 +7620,8 @@ mdb_cursor_init(MDB_cursor *mc, MDB_txn *txn, MDB_dbi dbi, MDB_xcursor *mx)
mc->mc_xcursor = NULL;
}
if (*mc->mc_dbflag & DB_STALE) {
- mdb_page_search(mc, NULL, MDB_PS_ROOTONLY);
+ int rc = mdb_page_search(mc, NULL, MDB_PS_ROOTONLY);
+ mdb_cassert(mc, !rc);
}
}
I suspect the problem will simply be that you've used an invalid DBI.
>
> That wouldn't resolve the problem, but it might avoid the crash and
> provide some insight into the failure (if mdb_page_search is actually
> returning a failure code when it doesn't find the DBI's root node).
>
> -myk
>
>
>
>
>
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/