minor fixes & removed a leak when freeing functions

This commit is contained in:
Wenzel Jakob 2016-01-17 22:36:40 +01:00
parent b2c2c79240
commit 95d18691c9

View File

@ -341,7 +341,6 @@ private:
static void destruct(function_entry *entry) { static void destruct(function_entry *entry) {
while (entry) { while (entry) {
function_entry *next = entry->next; function_entry *next = entry->next;
delete entry->def;
if (entry->free_data) if (entry->free_data)
entry->free_data(entry->data); entry->free_data(entry->data);
std::free((char *) entry->name); std::free((char *) entry->name);
@ -352,6 +351,10 @@ private:
std::free((char *) arg.descr); std::free((char *) arg.descr);
Py_XDECREF(arg.value); Py_XDECREF(arg.value);
} }
if (entry->def) {
free((char *) entry->def->ml_doc);
delete entry->def;
}
delete entry; delete entry;
entry = next; entry = next;
} }
@ -410,7 +413,7 @@ private:
signature += c; signature += c;
} }
} }
if (type_depth != 0 && types[type_index ] != nullptr) if (type_depth != 0 || types[type_index] != nullptr)
throw std::runtime_error("Internal error while parsing type signature (2)"); throw std::runtime_error("Internal error while parsing type signature (2)");
#if !defined(PYBIND11_CPP14) #if !defined(PYBIND11_CPP14)