Still some loose ends after commit ba53e284e68
Jeremy Allison
jra at samba.org
Fri Jan 10 23:51:08 UTC 2020
On Fri, Jan 10, 2020 at 03:34:10PM -0800, Jeremy Allison wrote:
> On Fri, Jan 10, 2020 at 10:46:54PM +0000, Christopher O Cowan - Christopher.O.Cowan--- via samba-technical wrote:
> > I still getting some assertions pointing to rec->value_valid after compiling with the patch. Seems to be when I'm attempting to start smbd.
> >
> > I've attached the log from running smbd -i -d10, and a dbx stack trace.
> > It appears that there additional callbacks that need to be cleaned up.
> ..
> > Type 'help' for help.
> > [using memory image in /tmp/core.6488334.10223352]
> > reading symbolic information ...
> >
> > IOT/Abort trap in pthread_kill at 0xd054bb94 ($t1)
> > 0xd054bb94 (pthread_kill+0xb4) 80410014 lwz r2,0x14(r1)
> > pthread_kill(??, ??) at 0xd054bb94
> > _p_raise(??) at 0xd054afe4
> > raise.raise(??) at 0xd0121020
> > abort() at 0xd017cae4
> > dump_core(), line 338 in "dumpcore.c"
> > smb_panic_s3(why = "assert failed: rec->value_valid"), line 853 in "util.c"
> > smb_panic(why = "assert failed: rec->value_valid"), line 174 in "fault.c"
> > dbwrap_record_get_value(rec = 0x2016e5f8), line 82 in "dbwrap.c"
> > regdb_upgrade_v2_to_v3_fn(rec = 0x2016e5f8, private_data = 0x2016de28), line 617 in "reg_backend_db.c"
> > traverse_persistent_callback(tdb = 0x2016e1f8, kbuf = (...), dbuf = (...), private_data = 0x2ff21fd8), line 1581 in "dbwrap_ctdb.c"
> > unnamed block in tdb_traverse_internal(tdb = 0x2016e1f8, fn = 0xf0570044, private_data = 0x2ff21fd8, tl = 0x2ff21f70), line 222 in "traverse.c"
> > tdb_traverse_internal(tdb = 0x2016e1f8, fn = 0xf0570044, private_data = 0x2ff21fd8, tl = 0x2ff21f70), line 222 in "traverse.c"
> > tdb_traverse(tdb = 0x2016e1f8, fn = 0xf0570044, private_data = 0x2ff21fd8), line 295 in "traverse.c"
> > unnamed block in db_ctdb_traverse(db = 0x2016de28, fn = 0x2004d1f8, private_data = 0x2016de28), line 1647 in "dbwrap_ctdb.c"
> > db_ctdb_traverse(db = 0x2016de28, fn = 0x2004d1f8, private_data = 0x2016de28), line 1647 in "dbwrap_ctdb.c"
> > dbwrap_traverse(db = 0x2016de28, f = 0x2004d1f8, private_data = 0x2016de28, count = (nil)), line 377 in "dbwrap.c"
> > regdb_upgrade_v2_to_v3(db = 0x2016de28), line 706 in "reg_backend_db.c"
> > regdb_init(), line 829 in "reg_backend_db.c"
> > registry_init_common(), line 33 in "reg_init_basic.c"
> > registry_init_full(), line 81 in "reg_init_full.c"
> > main(argc = 3, argv = 0x2ff2255c), line 2020 in "server.c"
>
> This backtrace is an interesting one.
Never mind - found it :-).
db_ctdb_fetch_locked_transaction() has an early return if
pull_newest_from_marshall_buffer() returns true, and we
weren't setting result->value_valid = true there.
Can you try this patch ? I think it'll fix it.
Cheers,
Jeremy.
-------------- next part --------------
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index ef667261359..11710603a5e 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -534,6 +534,7 @@ static struct db_record *db_ctdb_fetch_locked_transaction(struct db_ctdb_ctx *ct
}
if (pull_newest_from_marshall_buffer(ctx->transaction->m_write, key,
NULL, result, &result->value)) {
+ result->value_valid = true;
return result;
}
More information about the samba-technical
mailing list