[plt-scheme] sqlite.plt seg faults with 370

From: Hans Oesterholt-Dijkema (hdnews at gawab.com)
Date: Wed Jul 25 10:17:47 EDT 2007

You mean 370 related, not sqlite.ffi related?

Op 25/7/2007 schreef "Jos Koot" <jos.koot at telefonica.net>:

>The problem may be more general. Earlier I reported seg fault problems
>encounterd on Windows XP home.
>I dont need threads to make them happen.
>Jos Koot
>
>----- Original Message -----
>From: "Dave Gurnell" <d.j.gurnell at gmail.com>
>To: "PLT Scheme" <plt-scheme at list.cs.brown.edu>
>Sent: Wednesday, July 25, 2007 1:19 PM
>Subject: Re: [plt-scheme] sqlite.plt seg faults with 370
>
>
>> The Untypers had problems with this a while back. This is my  hypothesis as to
>> what's going on (although it happened to us a year  ago so I may be
>> remembering things wrong):
>>
>> SQLite can be compiled in thread-safe and non-thread-safe modes  (there's a
>> switch on the compile or make step, I forget which). On  Etch, the default
>> package is non-thread-safe. The Scheme interface  doesn't do anything to
>> correct this, and concurrent queries can cause  segfaults.
>>
>> You'll probably find that you get more crashes if you're doing lots  of large
>> queries, like selecting hundreds to thousands of rows as a  time, because this
>> increases the chance of multiple queries overlapping.
>>
>> So... you have options:
>>
>>   - fix things at the C level;
>>   - fix things at the Scheme level (semaphores / channels / etc);
>>   - compile your own version of SQLite with thread safety enabled.
>>
>> You could also try testing your code on OS X - it comes with a thread- safe
>> copy SQLite pre-installed.
>>
>> Cheers,
>>
>> -- Dave
>>
>>>> I had the same problem with sqld-sqlite.plt. I fixed it, using
>>>> semaphores. But now I got to think about it. SQLite uses callbacks
>>>> from C to Scheme to return query results. Also it uses a callback
>>>> function to fix locks. Maybe it has something to do with the moving
>>>> GC (pointers get moved around)?
>>>
>>> The foreign implementation use immobile boxes to make sure that
>>> pointers to Scheme callbacks don't change.  But you need to make sure
>>> that they are not collected -- for example, avoid (lambda () ...) with
>>> no additional references as callbacks.
>>>
>>> --
>>>           ((lambda (x) (x x)) (lambda (x) (x x)))          Eli  Barzilay:
>>>                   http://www.barzilay.org/                 Maze is  Life!
>>> _________________________________________________
>>>   For list-related administrative tasks:
>>>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>
>_________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>


Posted on the users mailing list.