summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Borzenkov <snaury@gmail.com>2014-09-20 23:51:24 +0400
committerAlexey Borzenkov <snaury@gmail.com>2014-09-20 23:51:24 +0400
commitda73bfd11cdc370162bedf9cb2793b93c3bf08e0 (patch)
treebdd509e74661100765997216ac4c8c508876894d
parent2f6a57f89006e098089e14eb0f82c376782aa585 (diff)
downloadgreenlet-da73bfd11cdc370162bedf9cb2793b93c3bf08e0.tar.gz
Fix a memory leak in PyGreenlet_New
-rw-r--r--greenlet.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/greenlet.c b/greenlet.c
index 733ceab..85013c5 100644
--- a/greenlet.c
+++ b/greenlet.c
@@ -1350,10 +1350,19 @@ PyGreenlet_New(PyObject *run, PyGreenlet *parent)
Py_INCREF(run);
g->run_info = run;
}
- if (parent == NULL) {
- parent = PyGreenlet_GetCurrent();
+
+ if (parent != NULL) {
+ if (PyGreenlet_SetParent(g, parent)) {
+ Py_DECREF(g);
+ return NULL;
+ }
+ } else {
+ if ((g->parent = PyGreenlet_GetCurrent()) == NULL) {
+ Py_DECREF(g);
+ return NULL;
+ }
}
- PyGreenlet_SetParent(g, parent);
+
return g;
}