This old mailing list thread better describes this proposed algorithm
to contain all open/close/lock/unlock activity in a single work thread:

  http://www.mail-archive.com/sqlite-users@sqlite.org/msg15852.html

--- Joe Wilson <[EMAIL PROTECTED]> wrote:
> As you already know, it's not just Linux - it's a POSIX thing.
> It's also true with FreeBSD and OpenBSD. (BSD fcntl man page below).
> 
> It would be great if SQLite could remove this last vestage of not 
> being able to reliably pass connections between threads on UNIX. 
> One way to accomplish that is to have all low level UNIX open() and close() 
> calls be performed from a single thread. Regardless of whatever thread 
> initiates 
> the sqlite3_open or sqlite3_close, SQLite could populate a threadsafe 
> work queue with the open/close information and wait on a condition variable 
> for its successful completion. The same "don't close() the file until the 
> file ref-count is zero" trick would still have to be employed behind
> the scenes.
> 
>  This interface follows the completely stupid semantics of System V and
>  IEEE Std 1003.1-1988 (``POSIX.1'') that require that all locks associated
>  with a file for a given process are removed when any file descriptor for
>  that file is closed by that process.  This semantic means that applica-
>  tions must be aware of any files that a subroutine library may access.
>  For example if an application for updating the password file locks the
>  password file database while making the update, and then calls
>  getpwnam(3) to retrieve a record, the lock will be lost because
>  getpwnam(3) opens, reads, and closes the password database.  The database
>  close will release all locks that the process has associated with the
>  database, even if the library routine never requested a lock on the data-
>  base.  Another minor semantic problem with this interface is that locks
>  are not inherited by a child process created using the fork(2) system
>  call.  The flock(2) interface has much more rational last close semantics
>  and allows locks to be inherited by child processes.  The flock(2) system
>  call is recommended for applications that want to ensure the integrity of
>  their locks when using library routines or wish to pass locks to their
>  children.


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

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

Reply via email to