[mod_python] Re: PyThreadState_Swap(NULL)

Graham Dumpleton grahamd at dscpl.com.au
Sun Aug 20 04:25:04 EDT 2006


On 20/08/2006, at 6:08 PM, Graham Dumpleton wrote:

> Have been busy and have added minimal set of functions to mod_python
> and exporting them for use in other modules. This code is now checked
> into subversion trunk for 3.3.
>
> As an example, here is how it could be used:

And here is a replacement example that fixes up some stupid mistakes
with cleaning up data.

     optfn_mp_acquire_interpreter("main_interpreter");

     request_obj = optfn_mp_get_request_object(r);

     m = PyImport_ImportModule("mod_python.testhandler");
     if (m) {
         d = PyModule_GetDict(m);
         o = PyDict_GetItemString(d, "handler");

         if (o) {
             PyObject *a = NULL;
             PyObject *r = NULL;

             a = Py_BuildValue("(O)", request_obj);
             r = PyEval_CallObject(o, a);

             Py_DECREF(a);

             if (r == NULL)
                 result = HTTP_INTERNAL_SERVER_ERROR;
             else if (!PyInt_Check(r))
                 result = HTTP_INTERNAL_SERVER_ERROR;
             else
                 result = PyInt_AsLong(r);

             Py_XDECREF(r);
         }
         else {
             result = HTTP_INTERNAL_SERVER_ERROR;
         }
     }
     else {
         result = HTTP_INTERNAL_SERVER_ERROR;
     }

     Py_XDECREF(m);
     Py_XDECREF(o);

     Py_XDECREF(request_obj);

     optfn_mp_release_interpreter();

     return result;

I ended up replacing the attachment to the JIRA issue a couple of times,
so watch out for moving targets. :-)

Graham


More information about the Mod_python mailing list