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. (Inspired by but not copying the fix from SF patch #475033.)
This commit is contained in:
parent
b112481f12
commit
a0dfc8577d
|
@ -54,6 +54,7 @@ Terrence Brannon
|
|||
Dave Brennan
|
||||
Gary S. Brown
|
||||
Oleg Broytmann
|
||||
Dave Brueck
|
||||
Stan Bubrouski
|
||||
Erik de Bueger
|
||||
Jan-Hein B"uhrman
|
||||
|
|
|
@ -366,6 +366,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;
|
||||
|
@ -376,11 +377,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);
|
||||
|
|
Loading…
Reference in New Issue