// wrapper for sqlite3_prepare_v2 which retries
creating statements if the db returns SQLITE_BUSY or
SQLITE_LOCKED
int sql_prepare(sqlite3 *db, const char *sql,
sqlite3_stmt **ppStmt, int wait) {
#ifdef SQL_DEBUG
        printf(sql);
        printf("\n");
        fflush(stdout);
#endif
        int rc;
        char looper[4] = {'|','/','-','\\'};
        int looperc = 0;
        int waited = 0;
        while (1) {
                rc = sqlite3_prepare_v2(db,sql,-1,ppStmt,NULL);
                if (rc == SQLITE_LOCKED || rc == SQLITE_BUSY) {
                        if (wait != 0) {
                                fprintf(stdout,"Database is locked or busy.
Waiting %is ... %1c    \r", ++waited,
looper[looperc]);
                                fflush(stdout);
                                wait--;
                                looperc = ++looperc % sizeof(looper);
                                sleep(1);
                        } else {
                                fprintf(stderr,"Database was locked or busy 
while
creating statement. I've given up.\n");
                                return rc;
                        }
                } else {
                        if (waited != 0) printf("\n\n");
                        return rc;
                }
        }
}
--- [EMAIL PROTECTED] schrieb:

> Hi,
> 
> I am having a scenario where I have one
> reader/writer and many writer threads.
> All writers are pretty basic (single INSERT INTO;
> some sort of a logging info
> what a thread has done).
> 
> I believe I will receive many BUSY return codes and
> I don't like these
> spinlock-like retries. The problem I am having with
> this design is that I would
> like to complete the thread ASAP, so that I don't
> have many threads idling and
> consuming resources of my embedded system.
> 
> I was thinking to either:
> 
> a. Use mutex/semaphore before writting to the
> database or
> 
> b. Have a (thread safe) list of INSERT INTO strings
> that every writer thread
> populates and the main reader/writer thread later
> executes.
> 
> Is this a good approach? Does anyone have a better
> design? I don't want to use
> other database, because I think Sqlite is great for
> an embedded system that I
> am using.
>
___________________________________________________________________________
> Najhitrej¹i brezplaèni klicni dostop :: Varno in
> zanesljivo po internetu
> Obi¹èite http://www.dialup386.com/
> 
>
-----------------------------------------------------------------------------
> To unsubscribe, send email to
> [EMAIL PROTECTED]
>
-----------------------------------------------------------------------------
> 
> 



                
___________________________________________________________ 
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to