mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-12 13:01:09 +03:00
Update comments on the unix file locking protocol. No changes to code.
FossilOrigin-Name: 716b20de4306de1653ba5bcdbfb8d210d2d46e1a
This commit is contained in:
@@ -1502,7 +1502,7 @@ static int unixLock(sqlite3_file *id, int eFileLock){
|
||||
** lock transitions in terms of the POSIX advisory shared and exclusive
|
||||
** lock primitives (called read-locks and write-locks below, to avoid
|
||||
** confusion with SQLite lock names). The algorithms are complicated
|
||||
** slightly in order to be compatible with windows systems simultaneously
|
||||
** slightly in order to be compatible with Windows95 systems simultaneously
|
||||
** accessing the same database file, in case that is ever required.
|
||||
**
|
||||
** Symbols defined in os.h indentify the 'pending byte' and the 'reserved
|
||||
@@ -1510,8 +1510,14 @@ static int unixLock(sqlite3_file *id, int eFileLock){
|
||||
** range', a range of 510 bytes at a well known offset.
|
||||
**
|
||||
** To obtain a SHARED lock, a read-lock is obtained on the 'pending
|
||||
** byte'. If this is successful, a random byte from the 'shared byte
|
||||
** range' is read-locked and the lock on the 'pending byte' released.
|
||||
** byte'. If this is successful, 'shared byte range' is read-locked
|
||||
** and the lock on the 'pending byte' released. (Legacy note: When
|
||||
** SQLite was first developed, Windows95 systems were still very common,
|
||||
** and Widnows95 lacks a shared-lock capability. So on Windows95, a
|
||||
** single randomly selected by from the 'shared byte range' is locked.
|
||||
** Windows95 is now pretty much extinct, but this work-around for the
|
||||
** lack of shared-locks on Windows95 lives on, for backwards
|
||||
** compatibility.)
|
||||
**
|
||||
** A process may only obtain a RESERVED lock after it has a SHARED lock.
|
||||
** A RESERVED lock is implemented by grabbing a write-lock on the
|
||||
@@ -1530,11 +1536,6 @@ static int unixLock(sqlite3_file *id, int eFileLock){
|
||||
** range'. Since all other locks require a read-lock on one of the bytes
|
||||
** within this range, this ensures that no other locks are held on the
|
||||
** database.
|
||||
**
|
||||
** The reason a single byte cannot be used instead of the 'shared byte
|
||||
** range' is that some versions of windows do not support read-locks. By
|
||||
** locking a random byte from a range, concurrent SHARED locks may exist
|
||||
** even if the locking primitive used is always a write-lock.
|
||||
*/
|
||||
int rc = SQLITE_OK;
|
||||
unixFile *pFile = (unixFile*)id;
|
||||
|
||||
Reference in New Issue
Block a user