Strange cjson bug doesn't occur in Pydb

kj socyl at 987jk.com.invalid
Thu Jun 12 10:59:18 EDT 2008


[Note: I changed the subject line to make it more informative.]

In <6bciubF3asvq1U1 at mid.uni-berlin.de> "Diez B. Roggisch" <deets at nospam.web.de> writes:

>kj wrote:

>> In <6bb01lF38u72tU1 at mid.uni-berlin.de> "Diez B. Roggisch"
>> <deets at nospam.web.de> writes:
>> 
>>>kj schrieb:
>>>> I'm running into a strange seg fault with the module cjson.  The
>>>> strange part is that it does not occur when I run the code under
>>>> Emacs' Pydb.
>>>> 
>>>> Here's an example:
>>>> 
>>>> 
>>>> import sys, cjson
>>>> 
>>>> d1 = {'a': 1, 'b': 2, 'c': 3}
>>>> print sys.version
>>>> j1 = cjson.encode(d1)
>>>> print j1   # should print the string '{"a": 1, "c": 3, "b": 2}'
>>>> 
>>>> The code above runs fine under Pydb, but segfaults at the call to
>>>> cjson.encode when I run it from the command line in a standard
>>>> Linux shell interaction.  In the printed version strings are
>>>> identical.
>>>> 
>>>> I figure this must be a bug in cjson.  I'd love to find a workaround
>>>> for it, and hope that this strange difference between Pydb and the
>>>> shell command line may be a clue to that.
>>>> 
>>>> Any thoughts?
>> 
>>>Are you sure you actually run the same interpreter in emacs as you do on
>>>the commandline?
>> 
>> No, I'm not.  All I know is that both Emacs and the commandline
>> are running on the same machine, and that the version string that
>> the program prints is the same in both conditions.  How can I verify
>> that that the same interpreter is running in both cases?

>By e.g. 

>import sys
>print sys.prefix

>Additionally, you should compare what

>sys.path

>contains and if it's the same - otherwise it might be that cjson is picked
>up from somewhere else.

>If all that's the case, I'd invoke python through gdb and see where the
>segfault happens.


Thanks for that suggestion.  I did so, and this is gdb's output at
the time failure:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 47622454277872 (LWP 14555)]
encode_object (object=0x777390) at cjson.c:946
946         temp = PyList_GET_ITEM(pieces, 0);

In my experience, however, the root cause of a segfault is often
quite far away in the code from where it is triggered...

Anyway, thanks for your help.

kynn

-- 
NOTE: In my address everything before the first period is backwards;
and the last period, and everything after it, should be discarded.



More information about the Python-list mailing list