Refreshing Python filters?

David Hláčik david at hlacik.eu
Sun Jun 8 12:10:48 UTC 2008


I've just installed Mozilla Thunderbird, and error i am recieving when
using read, post as mentioned :
A news (NNTP) error occurred: glibc detected ***-nnrpd:
david-nb.net.hlacik.eu AUTHINFO: free() invalid next size
(fast):0x08562148 ***
On Sun, Jun 8, 2008 at 2:02 PM, David Hláčik <david at hlacik.eu> wrote:
> Hello Julien , thank you for you effort anyway. I am getting closer
> and i am restarting innd every time i made a change to my python
> hooks.
> Let me please answer last question , i actually need to have finished
> that whole access and authentication think until tommorow for company
> i am working :
> my python authentication works fine.
> i have problem with python access , let me describe it closer.
> As i know from documentation module access should return directory
> with read and post keys and as a value it should contain newsgroups .
> When my access module returns : {'read':'*','post':'*'} , it works
> just fine and i am getting access to all newsgroups, but when my
> access module returns :
> {'read':'local.sandbox,'write':'local.sandbox'} i will get an error in
> client Windows Mail and all others too (no in news.notice logs) that
> client was unable to retrieve list of newsgroups available on server
> with error string : ====BACKTRACE======
>
> Thank you!
>
> On Sun, Jun 8, 2008 at 1:10 PM, Julien ÉLIE <julien at trigofacile.com> wrote:
>> Hi,
>>
>>> I have just tried to play with filter_innd.py but I have an issue with
>>> applying the changes done in this file when reloading it.
>>>
>>> Is there a special thing to do in order to correctly reload a Python
>>> filter?
>>>
>>> In fact, I cannot reload it without *stopping* and *restarting* INN!
>>> I reckon it is a bug...
>>
>> Oh, reading Python API on reloading:
>>
>>   Reload a previously imported module.  The argument must be a module
>> object,
>>   so it must have been successfully imported before.
>>   [...]
>>   There are a number of other caveats:
>>   If a module is syntactically correct but its initialization fails, the
>> first
>>   import statement for it does not bind its name locally, but does store a
>>   (partially initialized) module object in sys.modules. To reload the module
>>   you must first import it again (this will bind the name to the partially
>>   initialized module object) before you can reload() it.
>>
>>
>> I do not understand well what Python exactly does.
>> What is partially initialized?  "dir(filter_innd)" does not seem to change.
>>
>>
>> However, what I see is that reloading properly works if I import the Python
>> module again before reloading it:
>>
>> Index: innd/python.c
>> ===================================================================
>> --- innd/python.c       (révision 7859)
>> +++ innd/python.c       (copie de travail)
>> @@ -601,6 +601,7 @@
>>       Py_XDECREF(result);
>>    }
>>
>> +    PYsetup();
>>    if ((newmodule = PyImport_ReloadModule(PYFilterModule)) == NULL) {
>>       syslog(L_ERROR, "cant reload python filter module");
>>       PYfilter(false);
>>
>>
>>
>> Maybe PYsetup() is too much and only a
>>   PyImport_ImportModule((char *) INN_PATH_PYTHON_STARTUP_M);
>> is enough but I do not know whether everything is properly initialized
>> by Python afterwards...
>>
>> --
>> Julien ÉLIE
>>
>> « Dans l'algèbre comme dans la police, il faut identifier X. » (André
>> Frédérique)
>>
>


More information about the inn-workers mailing list