SQLite error (5): database is locked

classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

SQLite error (5): database is locked

Urs Wagner
Hallo

I use several tasks in C# to call Sqlite queries.
No I get the error SQLite error (5): database is locked.
Is it not possible to use more than one tasks with Sqlite?

Regards

Urs
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Simon Slavin-3
On 14 Jan 2019, at 9:23am, Urs Wagner <[hidden email]> wrote:

> I use several tasks in C# to call Sqlite queries.
> No I get the error SQLite error (5): database is locked.
> Is it not possible to use more than one tasks with Sqlite?

Please set a timeout for all connections to your database:

<https://sqlite.org/c3ref/busy_timeout.html>

<https://sqlite.org/pragma.html#pragma_busy_timeout>

A good timeout value is at least 10000 milliseconds.

Simon.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: [EXTERNAL] SQLite error (5): database is locked

Hick Gunter
In reply to this post by Urs Wagner
With journal mode, SQLite supports 1 writer OR n readers; with WAL mode, SQLite supports 1 writer AND N readers.

In any case, connections need to indicate if or how long they are willing to wait for the db file to be unlocked. Default is NO.

The easiest way is to specify a timeout on the connection. The value needs to be longer than your longest write transaction is expected to run and shorter than the latency required by your application.

-----Ursprüngliche Nachricht-----
Von: sqlite-users [mailto:[hidden email]] Im Auftrag von Urs Wagner
Gesendet: Montag, 14. Jänner 2019 10:24
An: SQLite mailing list <[hidden email]>
Betreff: [EXTERNAL] [sqlite] SQLite error (5): database is locked

Hallo

I use several tasks in C# to call Sqlite queries.
No I get the error SQLite error (5): database is locked.
Is it not possible to use more than one tasks with Sqlite?

Regards

Urs
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


___________________________________________
 Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0

May be privileged. May be confidential. Please delete if not the addressee.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: [EXTERNAL] SQLite error (5): database is locked

Urs Wagner
We are using entity framework

The timeout pragma does not work. Is think the timeout is not set, see below

            var esb = new EntityConnectionStringBuilder
            {
                Metadata = "res://*/RadaxModel.csdl|res://*/RadaxModel.ssdl|res://*/RadaxModel.msl",
                Provider = "System.Data.SQLite.EF6",
                ProviderConnectionString = @"data source=" + _dataBase + ";PRAGMA foreign_keys = ON;PRAGMA locking_mode = EXCLUSIVE;PRAGMA schema.synchronous = NORMAL; PRAGMA schema.journal_mode = DELETE; PRAGMA busy_timeout = 100000"
            };


-----Original Message-----
From: sqlite-users <[hidden email]> On Behalf Of Hick Gunter
Sent: Monday, January 14, 2019 11:28 AM
To: 'SQLite mailing list' <[hidden email]>
Subject: Re: [sqlite] [EXTERNAL] SQLite error (5): database is locked

With journal mode, SQLite supports 1 writer OR n readers; with WAL mode, SQLite supports 1 writer AND N readers.

In any case, connections need to indicate if or how long they are willing to wait for the db file to be unlocked. Default is NO.

The easiest way is to specify a timeout on the connection. The value needs to be longer than your longest write transaction is expected to run and shorter than the latency required by your application.

-----Ursprüngliche Nachricht-----
Von: sqlite-users [mailto:[hidden email]] Im Auftrag von Urs Wagner
Gesendet: Montag, 14. Jänner 2019 10:24
An: SQLite mailing list <[hidden email]>
Betreff: [EXTERNAL] [sqlite] SQLite error (5): database is locked

Hallo

I use several tasks in C# to call Sqlite queries.
No I get the error SQLite error (5): database is locked.
Is it not possible to use more than one tasks with Sqlite?

Regards

Urs
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


___________________________________________
 Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0

May be privileged. May be confidential. Please delete if not the addressee.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: [EXTERNAL] SQLite error (5): database is locked

Hick Gunter
Please note the the semicolon at the end of an SQL Statement is required. "PRAGMA busy_timeout = 1000000" is not complete SQL.
Also, the schema prefix needs to be replaced with the attach name of the database whose properties you wish to query/change. It may be omitted if "main" is desired.

-----Ursprüngliche Nachricht-----
Von: sqlite-users [mailto:[hidden email]] Im Auftrag von Urs Wagner
Gesendet: Montag, 14. Jänner 2019 12:14
An: SQLite mailing list <[hidden email]>
Betreff: Re: [sqlite] [EXTERNAL] SQLite error (5): database is locked

We are using entity framework

The timeout pragma does not work. Is think the timeout is not set, see below

            var esb = new EntityConnectionStringBuilder
            {
                Metadata = "res://*/RadaxModel.csdl|res://*/RadaxModel.ssdl|res://*/RadaxModel.msl",
                Provider = "System.Data.SQLite.EF6",
                ProviderConnectionString = @"data source=" + _dataBase + ";PRAGMA foreign_keys = ON;PRAGMA locking_mode = EXCLUSIVE;PRAGMA schema.synchronous = NORMAL; PRAGMA schema.journal_mode = DELETE; PRAGMA busy_timeout = 100000"
            };


-----Original Message-----
From: sqlite-users <[hidden email]> On Behalf Of Hick Gunter
Sent: Monday, January 14, 2019 11:28 AM
To: 'SQLite mailing list' <[hidden email]>
Subject: Re: [sqlite] [EXTERNAL] SQLite error (5): database is locked

With journal mode, SQLite supports 1 writer OR n readers; with WAL mode, SQLite supports 1 writer AND N readers.

In any case, connections need to indicate if or how long they are willing to wait for the db file to be unlocked. Default is NO.

The easiest way is to specify a timeout on the connection. The value needs to be longer than your longest write transaction is expected to run and shorter than the latency required by your application.

-----Ursprüngliche Nachricht-----
Von: sqlite-users [mailto:[hidden email]] Im Auftrag von Urs Wagner
Gesendet: Montag, 14. Jänner 2019 10:24
An: SQLite mailing list <[hidden email]>
Betreff: [EXTERNAL] [sqlite] SQLite error (5): database is locked

Hallo

I use several tasks in C# to call Sqlite queries.
No I get the error SQLite error (5): database is locked.
Is it not possible to use more than one tasks with Sqlite?

Regards

Urs
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


___________________________________________
 Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0

May be privileged. May be confidential. Please delete if not the addressee.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users


___________________________________________
 Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0

May be privileged. May be confidential. Please delete if not the addressee.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: [EXTERNAL] SQLite error (5): database is locked

Barry Smith
In reply to this post by Urs Wagner
That's not how you set a busy timeout using a connection string. That's not how you set any (pragma) options with a connection string. Check the System.Data.SQLite documentation (or google) to find out connection string parameters, or play around with the SQLiteConnectionStringBuilder.

The busy timeout pragma will not help if you end up in a deadlock. One way a deadlock can occur is as follows:
 1) Connection A starts a transaction and reads the database - it takes out a shared lock
 2) Connection B starts a transaction and reads the database - it too takes out a shared lock
 3) Connection A attempts to write to the database, so it upgrades to a reserved lock and waits for all readers to close (all shared locks to be released).
 4) Connection B attempts to write to the database. It keeps its shared lock and tries to upgrade to reserved. Because A already owns a reserved lock, connection B is denied its lock. No amount of waiting will solve this problem because A is waiting for B to release its lock so it can have an exclusive lock. SQLite knows this, so it returns SQLITE_BUSY immediately.

https://www.sqlite.org/lockingv3.html

Note that the above is true for databases with an old style (non-WAL) journal. I assume similar protections and situations exist in WAL, but can't be certain and they may use a different mechanism.

You can figure out whether you have a deadlock or simply the wait timed out by looking at how quickly the error was returned. You can also look at where other threads (or processes if your debugger can attach to multiple processes) are when the error occurs.

Are you using explicit transactions? Entity Franework shouldn't cause deadlocks unless you are manually taking control of the transactions. EF can also take a very long time to SaveChanges if you have a large number of entities...

> On 14 Jan 2019, at 10:14 pm, Urs Wagner <[hidden email]> wrote:
>
> We are using entity framework
>
> The timeout pragma does not work. Is think the timeout is not set, see below
>
>            var esb = new EntityConnectionStringBuilder
>            {
>                Metadata = "res://*/RadaxModel.csdl|res://*/RadaxModel.ssdl|res://*/RadaxModel.msl",
>                Provider = "System.Data.SQLite.EF6",
>                ProviderConnectionString = @"data source=" + _dataBase + ";PRAGMA foreign_keys = ON;PRAGMA locking_mode = EXCLUSIVE;PRAGMA schema.synchronous = NORMAL; PRAGMA schema.journal_mode = DELETE; PRAGMA busy_timeout = 100000"
>            };
>
>
> -----Original Message-----
> From: sqlite-users <[hidden email]> On Behalf Of Hick Gunter
> Sent: Monday, January 14, 2019 11:28 AM
> To: 'SQLite mailing list' <[hidden email]>
> Subject: Re: [sqlite] [EXTERNAL] SQLite error (5): database is locked
>
> With journal mode, SQLite supports 1 writer OR n readers; with WAL mode, SQLite supports 1 writer AND N readers.
>
> In any case, connections need to indicate if or how long they are willing to wait for the db file to be unlocked. Default is NO.
>
> The easiest way is to specify a timeout on the connection. The value needs to be longer than your longest write transaction is expected to run and shorter than the latency required by your application.
>
> -----Ursprüngliche Nachricht-----
> Von: sqlite-users [mailto:[hidden email]] Im Auftrag von Urs Wagner
> Gesendet: Montag, 14. Jänner 2019 10:24
> An: SQLite mailing list <[hidden email]>
> Betreff: [EXTERNAL] [sqlite] SQLite error (5): database is locked
>
> Hallo
>
> I use several tasks in C# to call Sqlite queries.
> No I get the error SQLite error (5): database is locked.
> Is it not possible to use more than one tasks with Sqlite?
>
> Regards
>
> Urs
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
> ___________________________________________
> Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0
>
> May be privileged. May be confidential. Please delete if not the addressee.
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: [EXTERNAL] SQLite error (5): database is locked

Urs Wagner
Thank You for Your explanation.
We do not using explicit transactions, SaveChanges takes rather a lot of time.


-----Original Message-----
From: sqlite-users <[hidden email]> On Behalf Of Barry Smith
Sent: Monday, January 14, 2019 1:50 PM
To: SQLite mailing list <[hidden email]>
Subject: Re: [sqlite] [EXTERNAL] SQLite error (5): database is locked

That's not how you set a busy timeout using a connection string. That's not how you set any (pragma) options with a connection string. Check the System.Data.SQLite documentation (or google) to find out connection string parameters, or play around with the SQLiteConnectionStringBuilder.

The busy timeout pragma will not help if you end up in a deadlock. One way a deadlock can occur is as follows:
 1) Connection A starts a transaction and reads the database - it takes out a shared lock
 2) Connection B starts a transaction and reads the database - it too takes out a shared lock
 3) Connection A attempts to write to the database, so it upgrades to a reserved lock and waits for all readers to close (all shared locks to be released).
 4) Connection B attempts to write to the database. It keeps its shared lock and tries to upgrade to reserved. Because A already owns a reserved lock, connection B is denied its lock. No amount of waiting will solve this problem because A is waiting for B to release its lock so it can have an exclusive lock. SQLite knows this, so it returns SQLITE_BUSY immediately.

https://www.sqlite.org/lockingv3.html

Note that the above is true for databases with an old style (non-WAL) journal. I assume similar protections and situations exist in WAL, but can't be certain and they may use a different mechanism.

You can figure out whether you have a deadlock or simply the wait timed out by looking at how quickly the error was returned. You can also look at where other threads (or processes if your debugger can attach to multiple processes) are when the error occurs.

Are you using explicit transactions? Entity Franework shouldn't cause deadlocks unless you are manually taking control of the transactions. EF can also take a very long time to SaveChanges if you have a large number of entities...

> On 14 Jan 2019, at 10:14 pm, Urs Wagner <[hidden email]> wrote:
>
> We are using entity framework
>
> The timeout pragma does not work. Is think the timeout is not set, see below
>
>            var esb = new EntityConnectionStringBuilder
>            {
>                Metadata = "res://*/RadaxModel.csdl|res://*/RadaxModel.ssdl|res://*/RadaxModel.msl",
>                Provider = "System.Data.SQLite.EF6",
>                ProviderConnectionString = @"data source=" + _dataBase + ";PRAGMA foreign_keys = ON;PRAGMA locking_mode = EXCLUSIVE;PRAGMA schema.synchronous = NORMAL; PRAGMA schema.journal_mode = DELETE; PRAGMA busy_timeout = 100000"
>            };
>
>
> -----Original Message-----
> From: sqlite-users <[hidden email]> On Behalf Of Hick Gunter
> Sent: Monday, January 14, 2019 11:28 AM
> To: 'SQLite mailing list' <[hidden email]>
> Subject: Re: [sqlite] [EXTERNAL] SQLite error (5): database is locked
>
> With journal mode, SQLite supports 1 writer OR n readers; with WAL mode, SQLite supports 1 writer AND N readers.
>
> In any case, connections need to indicate if or how long they are willing to wait for the db file to be unlocked. Default is NO.
>
> The easiest way is to specify a timeout on the connection. The value needs to be longer than your longest write transaction is expected to run and shorter than the latency required by your application.
>
> -----Ursprüngliche Nachricht-----
> Von: sqlite-users [mailto:[hidden email]] Im Auftrag von Urs Wagner
> Gesendet: Montag, 14. Jänner 2019 10:24
> An: SQLite mailing list <[hidden email]>
> Betreff: [EXTERNAL] [sqlite] SQLite error (5): database is locked
>
> Hallo
>
> I use several tasks in C# to call Sqlite queries.
> No I get the error SQLite error (5): database is locked.
> Is it not possible to use more than one tasks with Sqlite?
>
> Regards
>
> Urs
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
>
> ___________________________________________
> Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0
>
> May be privileged. May be confidential. Please delete if not the addressee.
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> _______________________________________________
> sqlite-users mailing list
> [hidden email]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: [EXTERNAL] SQLite error (5): database is locked

Simon Slavin-3
In reply to this post by Urs Wagner
On 14 Jan 2019, at 11:14am, Urs Wagner <[hidden email]> wrote:

>                ProviderConnectionString = @"data source=" + _dataBase + ";PRAGMA foreign_keys = ON;PRAGMA locking_mode = EXCLUSIVE;PRAGMA schema.synchronous = NORMAL; PRAGMA schema.journal_mode = DELETE; PRAGMA busy_timeout = 100000"

I am suspicious about this, but I do not know entity framework well enough to know for sure.  Can you include arbitrary PRAGMA statements in am entity framework connection string like this ?

Simon.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Keith Medcalf
In reply to this post by Urs Wagner

Are you getting as OS ERROR 5 or the SQLITE Return Code 5 (SQLITE_BUSY).  

The former means that the OS is indicating that the USERID you are using to run the task cannot open the file or the directory or the temporary files or the journal files required because it has not been granted the necessary permissions to do so; the latter indicates that the file has been opened but that you simply are trying to do something while the database is busy doing something else.

---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a lot about anticipated traffic volume.

>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>[hidden email]] On Behalf Of Urs Wagner
>Sent: Monday, 14 January, 2019 02:24
>To: SQLite mailing list
>Subject: [sqlite] SQLite error (5): database is locked
>
>Hallo
>
>I use several tasks in C# to call Sqlite queries.
>No I get the error SQLite error (5): database is locked.
>Is it not possible to use more than one tasks with Sqlite?
>
>Regards
>
>Urs
>_______________________________________________
>sqlite-users mailing list
>[hidden email]
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Thomas Kurz
In reply to this post by Simon Slavin-3
> pragma_busy_timeout

Does setting the busy_timeout retry periodically (e.g. every x milliseconds), or is there some automatism that ensures that the requested operation is done just-in-time as soon as the previous/blocking operation is finished?

_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Simon Slavin-3
On 14 Jan 2019, at 6:34pm, Thomas Kurz <[hidden email]> wrote:

>> pragma_busy_timeout
>
> Does setting the busy_timeout retry periodically (e.g. every x milliseconds), or is there some automatism that ensures that the requested operation is done just-in-time as soon as the previous/blocking operation is finished?

The busy_timeout setting is the maximum amount of time that the busy_timeout routine is allowed to run.  That routine is not expected to sleep for that amount of time you set in a single sleep.

SQLite's own busy_timeout routine (the one you get if you don't supply your own) uses exponential backoff.  It first sleeps for a very small amount of time, then checks the lock.  If access is still prevented it sleeps longer, then checks again.  Then longer still, then longer still, until the amount of time /since the routine started/ exceeds the timeout you set.

The "just-in-time" idea mentioned in your question doesn't work in real life, since constantly checking mutex status keeps one core completely busy, using lots of power and generating lots of heat.

Simon.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Tim Streater-3
On 14 Jan 2019, at 18:54, Simon Slavin <[hidden email]> wrote:

> SQLite's own busy_timeout routine (the one you get if you don't supply your
> own) uses exponential backoff. It first sleeps for a very small amount of
> time, then checks the lock. If access is still prevented it sleeps longer,
> then checks again. Then longer still, then longer still, until the amount of
> time /since the routine started/ exceeds the timeout you set.

Hmm, from my attempt at interpreting the source code I gained the impression that the handler used exponential backoff for the first few attempts, but then used a constant period for the rest (up to the set limit). Is this not the case?


--
Cheers  --  Tim
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Simon Slavin-3
On 14 Jan 2019, at 7:04pm, Tim Streater <[hidden email]> wrote:

> Hmm, from my attempt at interpreting the source code I gained the impression that the handler used exponential backoff for the first few attempts, but then used a constant period for the rest (up to the set limit). Is this not the case?

I'm sure your interpretation is correct.  I just knew that the default handler used exponential backoff, and what that means.  I didn't know that it used it for every retry.  It seems likely that the dev team set a maximum based on their understanding of what lock times were plausible.

Simon.
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: SQLite error (5): database is locked

Rowan Worth-2
In reply to this post by Simon Slavin-3
On Tue, 15 Jan 2019 at 02:54, Simon Slavin <[hidden email]> wrote:

> The "just-in-time" idea mentioned in your question doesn't work in real
> life, since constantly checking mutex status keeps one core completely
> busy, using lots of power and generating lots of heat.
>

Technically "just-in-time" could be implemented fine; the normal file
locking primitives used on both windows and unix can operate in a blocking
mode, where the kernel wakes the process up once the lock has been
relinquished. sqlite just doesn't use that API.

It would be a pretty significant change for sqlite to invoke said API, and
may affect the ability to support other existing locking modes which don't
provide the same semantics and where polling _is_ required (eg. dotfile).

Also I'm not 100% sure whether it would be safe to drop in, or whether
blocking the process for lock acquisition within sqlite's locking protocol
would introduce deadlock scenarios.

FYI sqlite's backoff reaches a maximum sleep time of 100ms. Unless you're
on unix and compile without -DHAVE_USLEEP=1 in which case there's no
backoff and every sleep is 1000ms long.

-Rowan
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users