I have several (identical processors) accessing a sqlite3 database  
over NFS. I have a busy handler (see below) and use "begin exclusive"

Periodically I get the following error from from sqlite3:

Function:artd_sql_exec_stmt error in stmt:begin exclusive against  
database:/wise/fops/ref/artid/latents.db, error:[database is locked]

I was under the impression that sqlite3 should return SQLITE_BUSY  
under these conditions?

Here is my busy handler:

PASSFAIL
artid_sql_busy_handler(void* p_arg_one, int num_prior_calls) {

   // Adding a random value here greatly reduces locking?
   if (*((int *)p_arg_one) < ARTID_ZERO) {
     usleep((rand() % 50000) + 40000); // Change magic number after test
   }
   else {
     usleep(50000); // Change magic number after test
   }

   /*
    * Have sqlite3_exec immediately return SQLITE_BUSY or
    * sleep if handler has been called less than
    * threshold value. 50 secs?
    */
   return (num_prior_calls < ARTID_THOUSAND);
}


How would I know if my busy_handler (is even) being called? And how do  
I avoid the said error?

Thanks,
-rosemary.



_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to