Kaydet (Commit) 8f113e91 authored tarafından Anthony Baxter's avatar Anthony Baxter

backport of 2.58:

  Fix SF bug #474538: Memory (reference) leak in poller.register (Dave Brueck)
  Replace some tortuous code that was trying to be clever but forgot to
  DECREF the key and value, by more longwinded but obviously correct
  code.
üst 3688899d
......@@ -372,6 +372,7 @@ poll_register(pollObject *self, PyObject *args)
{
PyObject *o, *key, *value;
int fd, events = POLLIN | POLLPRI | POLLOUT;
int err;
if (!PyArg_ParseTuple(args, "O|i:register", &o, &events)) {
return NULL;
......@@ -382,11 +383,20 @@ poll_register(pollObject *self, PyObject *args)
/* Add entry to the internal dictionary: the key is the
file descriptor, and the value is the event mask. */
if ( (NULL == (key = PyInt_FromLong(fd))) ||
(NULL == (value = PyInt_FromLong(events))) ||
(PyDict_SetItem(self->dict, key, value)) == -1) {
key = PyInt_FromLong(fd);
if (key == NULL)
return NULL;
value = PyInt_FromLong(events);
if (value == NULL) {
Py_DECREF(key);
return NULL;
}
err = PyDict_SetItem(self->dict, key, value);
Py_DECREF(key);
Py_DECREF(value);
if (err < 0)
return NULL;
self->ufd_uptodate = 0;
Py_INCREF(Py_None);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment