Hi,
I just tried to upgrade from 0.7.x to 0.8.1 compiling bitcoin-0.8.1-linux.tar.gz from source, but the resulting bitcoind executable fails with an assertion in ./db/skiplist.h. This is on debian-mipsel squeeze, compiled via
make -C src/src -f makefile.unix CXXFLAGS="-O2 -march=loongson2f"
DEBUGFLAGS=
using gcc (Debian 4.4.5-8) 4.4.5
(Note the unusual architecture: 32-bit MIPSEL!)
A backtrace recorded from GDB: (gdb) run Starting program: /usr/local/bin/bitcoind [Thread debugging using libthread_db enabled] bitcoind: ./db/skiplist.h:152: leveldb::SkipList<Key, Comparator>::Node* leveldb::SkipList<Key, Comparator>::Node::Next(int) [with Key = const char*, Comparator = leveldb::MemTable::KeyComparator]: Assertion `n >= 0' failed.
Program received signal SIGABRT, Aborted. 0x2b221048 in raise () from /lib/libc.so.6 (gdb) bt #0 0x2b221048 in raise () from /lib/libc.so.6 #1 0x2b2261f8 in abort () from /lib/libc.so.6 #2 0x2b218238 in __assert_fail () from /lib/libc.so.6 #3 0x0063884c in leveldb::SkipList<char const, leveldb::MemTable::KeyComparator>::FindGreaterOrEqual(char const\ const&, leveldb::SkipList<char const, leveldb::MemTable::KeyComparator>::Node**) const () #4 0x00638944 in leveldb::SkipList<char const, leveldb::MemTable::KeyComparator>::Insert(char const* const&) () #5 0x00638294 in leveldb::MemTable::Add(unsigned long long, leveldb::ValueType, leveldb::Slice const&, leveldb::Slice const&) () #6 0x00646fdc in leveldb::(anonymous namespace)::MemTableInserter::Put(leveldb::Slice const&, leveldb::Slice const&) () #7 0x00647464 in leveldb::WriteBatch::Iterate(leveldb::WriteBatch::Handler) const () #8 0x006475c4 in leveldb::WriteBatchInternal::InsertInto(leveldb::WriteBatch const_, leveldb::MemTable_) () #9 0x0062c550 in leveldb::DBImpl::RecoverLogFile(unsigned long long, leveldb::VersionEdit_, unsigned long long_) () #10 0x0062d734 in leveldb::DBImpl::Recover(leveldb::VersionEdit) () #11 0x0062e6b8 in leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**) () #12 0x0061c38c in CLevelDB::CLevelDB(boost::filesystem::basic_path<std::string, boost::filesystem::path_traits> const&, unsigned int, bool, bool) ()
---Type <return> to continue, or q <return> to quit--- #13 0x0061ca70 in CBlockTreeDB::CBlockTreeDB(unsigned int, bool, bool) () #14 0x00496dac in AppInit2() () #15 0x0049a290 in AppInit(int, char**) () #16 0x0049aeb0 in main ()
This happened on first invokation, I do not yet have any leveldb files present. The only files touched by 0.8.1 in my ~/.bitcoin directory are debug.log and peers.dat.
cheers,
David