=?ISO-8859-1?Q?Tobias_Rundstr=F6m?= <[EMAIL PROTECTED]> wrote:
> 
> Got this email from this a developer of XMMS2 Sounds a bit scary,  
> anyone have seen this before?
> 
> Begin forwarded message:
> 
> > From: Alexander Botero-Lowry <[EMAIL PROTECTED]>
> > Date: måndag 3 jul 2006 16.13.29 GMT-04:00
> > To: [EMAIL PROTECTED]
> > Subject: Fw: sqlite3_busy_timeout() on NetBSD
> >
> >
> > I'm an xmms2 developer who does most of the work of getting xmms2
> > working on the various BSDs. I've currently run into a strange problem
> > with sqlite3_busy_timeout on NetBSD. It seems that it doesn't timeout
> > at all. ....
> >
> > !DSPAM:44a97a9f190355315134984!
> >
> 

Thanks for the login, Alex.

To test the behavior of sqlite3_busy_timeout on NetBSD, I
used the simple program shown below.  This program sets the
busy timeout to 60, then runs the SQL statement given in its
second argument.

To do the test, I first opened the test database using the
regular sqlite3 shell and executed "BEGIN EXCLUSIVE" there.
Like this:

    $ sqlite3 t1.db
    sqlite> BEGIN EXCLUSIVE;

Then in a separate terminal window, Ii typed:

    ./a.out t1.db 'SELECT * FROM t1'

The a.out program froze waiting on the lock to clear.  In
the first window I typed: COMMIT.  This caused the a.out
program running in the second window to immediately return
its results.

So I am unable to reproduce the problem you are having
with sqlite3_busy_timeout.  It appears to be working correctly
to me.

Perhaps you can suggest an different test that will
reproduce the problem?

-------------------------------------------------------------------
#include <stdio.h>
#include <sqlite3.h>


static int print_result(void *notUsed, int nArg, char **apArg, char **apCol){
  int i;
  for(i=0; i<nArg; i++){
    printf("%s = %s\n", apCol[i], apArg[i]);
  }
  return 0;
}

int main(int argc, char **argv){
  sqlite3 *db;
  char *zErrMsg;

  if( argc!=3 ){
    fprintf(stderr, "Usage: %s DBNAME SQL\n", *argv);
    return 1;
  }
  if( sqlite3_open(argv[1], &db)!=SQLITE_OK ){
    fprintf(stderr, "Error opening database\n");
    return 1;
  }
  sqlite3_busy_timeout(db, 60000);
  if( sqlite3_exec(db, argv[2], print_result, 0, &zErrMsg)!=SQLITE_OK ){
    fprintf(stderr, "Error: %s\n", zErrMsg);
    return 1;
  }
  return 0;
}

--
D. Richard Hipp   <[EMAIL PROTECTED]>

Reply via email to