Open-source graph database, built for real-time streaming data, compatible with Neo4j.
cyphergraphgraph-algorithmsgraph-analysisgraph-databasekafkakafka-streamsnosqlopencypherstream-processingstreaming-data
Summary: `PyObject_Init` shouldn't be used in conjunction with `PyObject_New`. The official Python documentation doesn't say this explicitly and many examples on the web suggest that they must be used together. When they are used together everything works when Memgraph is built against the release Python binary, but doesn't work when built against the debug Python binary. An implicit example that `PyObject_Init` shouldn't be used with `PyObject_New` can be found in the Python source, in the file `Include/objimpl.h`: ``` This example code implements an object constructor with a custom allocator, where PyObject_New is inlined, and shows the important distinction between two steps (at least): 1) the actual allocation of the object storage; 2) the initialization of the Python specific fields in this storage with PyObject_{Init, InitVar}. PyObject * YourObject_New(...) { PyObject *op; op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); if (op == NULL) return PyErr_NoMemory(); PyObject_Init(op, &YourTypeStruct); op->ob_field = value; ... return op; } Note that in C++, the use of the new operator usually implies that the 1st step is performed automatically for you, so in a C++ class constructor you would start directly with PyObject_Init/InitVar ``` It explains that `PyObject_New` is actually equal to `malloc` + `PyObject_Init`. Reviewers: llugovic Reviewed By: llugovic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D2737 |
||
---|---|---|
cmake | ||
config | ||
docs | ||
environment | ||
include | ||
libs | ||
query_modules | ||
release | ||
src | ||
tests | ||
tools | ||
.arcconfig | ||
.arclint | ||
.clang-format | ||
.clang-tidy | ||
.gdbinit | ||
.gitignore | ||
.ycm_extra_conf.py | ||
apollo_archives.py | ||
apollo_archives.yaml | ||
apollo_build.yaml | ||
CHANGELOG.md | ||
CMakeLists.txt | ||
Doxyfile | ||
Doxylogo.png | ||
init | ||
README.md |
memgraph
Memgraph is an ACID compliant high performance transactional distributed in-memory graph database featuring runtime native query compiling, lock free data structures, multi-version concurrency control and asynchronous IO.
dependencies
Memgraph can be compiled using any modern c++ compiler. It mostly relies on the standard template library, however, some things do require external libraries.
Some code contains linux-specific libraries and the build is only supported on a 64 bit linux kernel.
- linux
- clang 3.8 (good c++11 support, especially lock free atomics)
- antlr (compiler frontend)
- cppitertools
- fmt format
- google benchmark
- google test
- glog
- gflags