[commit] r5589 - freeswitch/branches/greenlizard/src/mod/languages/mod_python
Author: greenlizard Date: Mon Aug 13 10:27:44 2007 New Revision: 5589 Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp Log: fix a bug introduced in last mod_python commit on greenlizard branch where dtmfs will segfault the switch due to an incorrect Py_XDECREF. fixed for dtmf handling, but event handling not retested yet Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp ============================================================================== --- freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp (original) +++ freeswitch/branches/greenlizard/src/mod/languages/mod_python/freeswitch_python.cpp Mon Aug 13 10:27:44 2007 @@ -109,7 +109,7 @@ PyObject *func, *arglist; PyObject *pyresult; - PyObject* headerdict; + PyObject *headerdict; char *resultStr; char *funcargs; @@ -159,6 +159,10 @@ headerdict = PyDict_New(); for (hp = event->headers; hp; hp = hp->next) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding event header to result"); + + // TODO: create PyObject pointers for name and value + // and explicitly decref them. all ref counting stuff is + // a mess and needs to be tested and looked at closer. PyDict_SetItem(headerdict, Py_BuildValue("s", hp->name), Py_BuildValue("s", hp->value)); @@ -172,7 +176,9 @@ "headers", headerdict); - //arglist = Py_BuildValue("(sis)", event->body, itype, funcargs); + Py_XDECREF(headerdict); + + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unknown input type: %d\n", itype); @@ -189,10 +195,9 @@ did_swap_in = end_allow_threads(); pyresult = PyEval_CallObject(func, arglist); - + Py_XDECREF(arglist); // Trash arglist - Py_XDECREF(headerdict); if (pyresult && pyresult != Py_None) { resultStr = (char *) PyString_AsString(pyresult); @@ -200,7 +205,7 @@ return cbresult; } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Python callback\n returned None"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Python callback\n returned None"); PyErr_Print(); PyErr_Clear(); }
participants (1)
-
Freeswitch SVN