diff --git a/arangod/RestHandler/RestDocumentHandler.cpp b/arangod/RestHandler/RestDocumentHandler.cpp index aa4708a66d..c9804bf437 100644 --- a/arangod/RestHandler/RestDocumentHandler.cpp +++ b/arangod/RestHandler/RestDocumentHandler.cpp @@ -573,6 +573,7 @@ bool RestDocumentHandler::deleteDocument() { search = builder.slice(); } else { try { + TRI_ASSERT(_request != nullptr); builderPtr = _request->toVelocyPack(transactionContext->getVPackOptions()); } catch (...) { // If an error occurs here the body is not parsable. Fail with bad parameter @@ -636,6 +637,7 @@ bool RestDocumentHandler::readManyDocuments() { return false; } + TRI_ASSERT(_request != nullptr); auto builderPtr = _request->toVelocyPack(transactionContext->getVPackOptions()); VPackSlice search = builderPtr->slice(); diff --git a/arangod/VocBase/collection.cpp b/arangod/VocBase/collection.cpp index 7f31ae96c8..e2fece2630 100644 --- a/arangod/VocBase/collection.cpp +++ b/arangod/VocBase/collection.cpp @@ -828,7 +828,7 @@ TRI_collection_t* TRI_CreateCollection( // create collection structure if (collection == nullptr) { try { - TRI_collection_t* tmp = new TRI_collection_t(parameters); + TRI_collection_t* tmp = new TRI_collection_t(vocbase, parameters); collection = tmp; } catch (std::exception&) { collection = nullptr; diff --git a/arangod/VocBase/collection.h b/arangod/VocBase/collection.h index c105a02518..862e44d0ec 100644 --- a/arangod/VocBase/collection.h +++ b/arangod/VocBase/collection.h @@ -294,11 +294,13 @@ struct TRI_collection_t { TRI_collection_t(TRI_collection_t const&) = delete; TRI_collection_t& operator=(TRI_collection_t const&) = delete; - TRI_collection_t() - : _tickMax(0), _state(TRI_COL_STATE_WRITE), _lastError(0) {} + TRI_collection_t() = delete; + + explicit TRI_collection_t(TRI_vocbase_t* vocbase) + : _vocbase(vocbase), _tickMax(0), _state(TRI_COL_STATE_WRITE), _lastError(0) {} - explicit TRI_collection_t(arangodb::VocbaseCollectionInfo const& info) - : _info(info), _tickMax(0), _state(TRI_COL_STATE_WRITE), _lastError(0) {} + TRI_collection_t(TRI_vocbase_t* vocbase, arangodb::VocbaseCollectionInfo const& info) + : _info(info), _vocbase(vocbase), _tickMax(0), _state(TRI_COL_STATE_WRITE), _lastError(0) {} ~TRI_collection_t() = default; diff --git a/arangod/VocBase/document-collection.cpp b/arangod/VocBase/document-collection.cpp index 904d158000..c60748329e 100644 --- a/arangod/VocBase/document-collection.cpp +++ b/arangod/VocBase/document-collection.cpp @@ -68,8 +68,9 @@ using namespace arangodb::basics; /// @brief create a document collection //////////////////////////////////////////////////////////////////////////////// -TRI_document_collection_t::TRI_document_collection_t() - : _lock(), +TRI_document_collection_t::TRI_document_collection_t(TRI_vocbase_t* vocbase) + : TRI_collection_t(vocbase), + _lock(), _nextCompactionStartIndex(0), _lastCompactionStatus(nullptr), _useSecondaryIndexes(true), @@ -1209,7 +1210,7 @@ TRI_document_collection_t* TRI_CreateDocumentCollection( // first create the document collection TRI_document_collection_t* document; try { - document = new TRI_document_collection_t(); + document = new TRI_document_collection_t(vocbase); } catch (std::exception&) { document = nullptr; } @@ -1753,7 +1754,7 @@ TRI_document_collection_t* TRI_OpenDocumentCollection(TRI_vocbase_t* vocbase, // first open the document collection TRI_document_collection_t* document = nullptr; try { - document = new TRI_document_collection_t(); + document = new TRI_document_collection_t(vocbase); } catch (std::exception&) { } @@ -3707,7 +3708,7 @@ int TRI_document_collection_t::remove(arangodb::Transaction* trx, TRI_ASSERT(marker == nullptr); // get the header pointer of the previous revision - TRI_doc_mptr_t* oldHeader; + TRI_doc_mptr_t* oldHeader = nullptr; VPackSlice key; if (slice.isString()) { key = slice; @@ -3720,6 +3721,7 @@ int TRI_document_collection_t::remove(arangodb::Transaction* trx, return res; } + TRI_ASSERT(oldHeader != nullptr); prevRev = oldHeader->revisionIdAsSlice(); previous = *oldHeader; diff --git a/arangod/VocBase/document-collection.h b/arangod/VocBase/document-collection.h index dad11c4731..34d6d7625c 100644 --- a/arangod/VocBase/document-collection.h +++ b/arangod/VocBase/document-collection.h @@ -36,6 +36,8 @@ #include "VocBase/voc-types.h" #include "Wal/Marker.h" +struct TRI_vocbase_t; + namespace arangodb { class EdgeIndex; class Index; @@ -90,7 +92,7 @@ struct TRI_doc_collection_info_t { //////////////////////////////////////////////////////////////////////////////// struct TRI_document_collection_t : public TRI_collection_t { - TRI_document_collection_t(); + explicit TRI_document_collection_t(TRI_vocbase_t* vocbase); ~TRI_document_collection_t();