X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpython.c;h=8772cd1fc23623d52f8ab8d96042ee86b18bc2bb;hb=23308534a393a9186e1d64a9c0a6a82086cb0a57;hp=6be727efb1305601a853bb6c16a4e281dc845ba2;hpb=2bdaa472d6955a8c93c6aa77f11748d4c611558e;p=collectd.git diff --git a/src/python.c b/src/python.c index 6be727ef..8772cd1f 100644 --- a/src/python.c +++ b/src/python.c @@ -335,7 +335,7 @@ static int cpy_read_callback(user_data_t *data) { static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_list, user_data_t *data) { int i; cpy_callback_t *c = data->data; - PyObject *ret, *list, *temp, *dict = NULL; + PyObject *ret, *list, *temp, *dict = NULL, *val; Values *v; CPY_LOCK_THREADS @@ -428,7 +428,8 @@ static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_li } free(table); } - v = PyObject_New(Values, (void *) &ValuesType); /* New reference. */ + val = Values_New(); /* New reference. */ + v = (Values *) val; sstrncpy(v->data.host, value_list->host, sizeof(v->data.host)); sstrncpy(v->data.type, value_list->type, sizeof(v->data.type)); sstrncpy(v->data.type_instance, value_list->type_instance, sizeof(v->data.type_instance)); @@ -436,10 +437,12 @@ static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_li sstrncpy(v->data.plugin_instance, value_list->plugin_instance, sizeof(v->data.plugin_instance)); v->data.time = value_list->time; v->interval = value_list->interval; + Py_CLEAR(v->values); v->values = list; + Py_CLEAR(v->meta); v->meta = dict; ret = PyObject_CallFunctionObjArgs(c->callback, v, c->data, (void *) 0); /* New reference. */ - Py_XDECREF(v); + Py_XDECREF(val); if (ret == NULL) { cpy_log_exception("write callback"); } else { @@ -451,11 +454,12 @@ static int cpy_write_callback(const data_set_t *ds, const value_list_t *value_li static int cpy_notification_callback(const notification_t *notification, user_data_t *data) { cpy_callback_t *c = data->data; - PyObject *ret; + PyObject *ret, *notify; Notification *n; CPY_LOCK_THREADS - n = PyObject_New(Notification, (void *) &NotificationType); /* New reference. */ + notify = Notification_New(); /* New reference. */ + n = (Notification *) notify; sstrncpy(n->data.host, notification->host, sizeof(n->data.host)); sstrncpy(n->data.type, notification->type, sizeof(n->data.type)); sstrncpy(n->data.type_instance, notification->type_instance, sizeof(n->data.type_instance)); @@ -465,7 +469,7 @@ static int cpy_notification_callback(const notification_t *notification, user_da sstrncpy(n->message, notification->message, sizeof(n->message)); n->severity = notification->severity; ret = PyObject_CallFunctionObjArgs(c->callback, n, c->data, (void *) 0); /* New reference. */ - Py_XDECREF(n); + Py_XDECREF(notify); if (ret == NULL) { cpy_log_exception("notification callback"); } else {