X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fpython.c;h=e7795c751ef757fc2c97611d0838035df3b79acf;hb=154cdd973167f1c9b5aab33875fe47af6a0964a6;hp=0fad6fa59a690a201d54d3a95fe33a3b29248222;hpb=dbeee0cfad69e701ea2665001fd9f2bce49c9489;p=collectd.git diff --git a/src/python.c b/src/python.c index 0fad6fa5..e7795c75 100644 --- a/src/python.c +++ b/src/python.c @@ -302,7 +302,7 @@ void cpy_log_exception(const char *context) { Py_XDECREF(traceback); return; } - list = PyObject_CallFunction(cpy_format_exception, "NNN", type, value, traceback); /* New reference. */ + list = PyObject_CallFunction(cpy_format_exception, "NNN", type, value, traceback); /* New reference. Steals references from "type", "value" and "traceback". */ if (list) l = PyObject_Length(list); for (i = 0; i < l; ++i) { @@ -322,9 +322,6 @@ void cpy_log_exception(const char *context) { } Py_XDECREF(list); PyErr_Clear(); - Py_DECREF(type); - Py_XDECREF(value); - Py_XDECREF(traceback); } static int cpy_read_callback(user_data_t *data) { @@ -1034,13 +1031,15 @@ PyMODINIT_FUNC PyInit_collectd(void) { #endif static int cpy_init_python() { - char *argv = ""; PyObject *sys; PyObject *module; #ifdef IS_PY3K + wchar_t *argv = L""; /* Add a builtin module, before Py_Initialize */ PyImport_AppendInittab("collectd", PyInit_collectd); +#else + char *argv = ""; #endif Py_Initialize(); @@ -1117,9 +1116,13 @@ static int cpy_config(oconfig_item_t *ci) { } else if (strcasecmp(item->key, "Encoding") == 0) { if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_STRING) continue; +#ifdef IS_PY3K + NOTICE("python: \"Encoding\" was used in the config file but Python3 was used, which does not support changing encodings. Ignoring this."); +#else /* Why is this even necessary? And undocumented? */ if (PyUnicode_SetDefaultEncoding(item->values[0].value.string)) cpy_log_exception("setting default encoding"); +#endif } else if (strcasecmp(item->key, "LogTraces") == 0) { if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_BOOLEAN) continue;