mirror of https://github.com/python/cpython
commit
f4cc2161d5
|
@ -601,6 +601,7 @@ Amos Latteier
|
||||||
Piers Lauder
|
Piers Lauder
|
||||||
Ben Laurie
|
Ben Laurie
|
||||||
Simon Law
|
Simon Law
|
||||||
|
Julia Lawall
|
||||||
Chris Lawrence
|
Chris Lawrence
|
||||||
Brian Leair
|
Brian Leair
|
||||||
Mathieu Leduc-Hamel
|
Mathieu Leduc-Hamel
|
||||||
|
|
|
@ -10,6 +10,9 @@ What's New in Python 3.3.0 Beta 2?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #15394: An issue in PyModule_Create that caused references to
|
||||||
|
be leaked on some error paths has been fixed. Patch by Julia Lawall.
|
||||||
|
|
||||||
- Issue #15368: An issue that caused bytecode generation to be
|
- Issue #15368: An issue that caused bytecode generation to be
|
||||||
non-deterministic has been fixed.
|
non-deterministic has been fixed.
|
||||||
|
|
||||||
|
|
|
@ -126,8 +126,10 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
|
||||||
d = PyModule_GetDict((PyObject*)m);
|
d = PyModule_GetDict((PyObject*)m);
|
||||||
if (module->m_methods != NULL) {
|
if (module->m_methods != NULL) {
|
||||||
n = PyUnicode_FromString(name);
|
n = PyUnicode_FromString(name);
|
||||||
if (n == NULL)
|
if (n == NULL) {
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
for (ml = module->m_methods; ml->ml_name != NULL; ml++) {
|
for (ml = module->m_methods; ml->ml_name != NULL; ml++) {
|
||||||
if ((ml->ml_flags & METH_CLASS) ||
|
if ((ml->ml_flags & METH_CLASS) ||
|
||||||
(ml->ml_flags & METH_STATIC)) {
|
(ml->ml_flags & METH_STATIC)) {
|
||||||
|
@ -135,16 +137,19 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
|
||||||
"module functions cannot set"
|
"module functions cannot set"
|
||||||
" METH_CLASS or METH_STATIC");
|
" METH_CLASS or METH_STATIC");
|
||||||
Py_DECREF(n);
|
Py_DECREF(n);
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
v = PyCFunction_NewEx(ml, (PyObject*)m, n);
|
v = PyCFunction_NewEx(ml, (PyObject*)m, n);
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
Py_DECREF(n);
|
Py_DECREF(n);
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
|
if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
Py_DECREF(n);
|
Py_DECREF(n);
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
|
@ -155,6 +160,7 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
|
||||||
v = PyUnicode_FromString(module->m_doc);
|
v = PyUnicode_FromString(module->m_doc);
|
||||||
if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
|
if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
|
||||||
Py_XDECREF(v);
|
Py_XDECREF(v);
|
||||||
|
Py_DECREF(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
|
|
Loading…
Reference in New Issue