--- [EMAIL PROTECTED] wrote:
> Ran <[EMAIL PROTECTED]> wrote:
> > Hi all,
> > 
> > I *think* that sqlite3_close behave strangly.
> > 
> > I use version 3.3.7 on Linux (Fedora Core 5).
> > 
> > What I do is to open a database, and start a transaction in it. Then,
> > without ending the transaction, open again the database and simply close it.
> > 
> > I found out, that the inner sqlite3_close return 0 (SQLITE_OK), but the
> > file handle is not released. So if I do it too many times, I run out of file
> > handles.
> > 
> 
> This behavior is intentional.  It is a work-around for a bug

SQLite should find the inode of the database file via stat()'s st_ino 
field prior to open() and if it is the same as an already opened
database file, it should use the same (refcounted) file descriptor,
eliminating the need for open() in this case.

> in the design of posix advisory locks.  With posix advisory locks,
> if you open the same file twice, giving two file descriptors,
> then you close one of the file descriptors, it deletes all the
> locks on the other file descriptor.  (No, I am not making this
> up - I wish I were.  This is proscribed behavior in the posix
> standard.)
> 
> So if you have a database open and in a transaction, it that
> database connection is holding a lock.  If you opened a second
> connection and immediately closed it, and if that close operation
> actually closed the file handle, then the locks held by the
> first connection would be released.  This would free other
> processes to start reading and writing the database while an
> update was still going on - resulting in database corruption.
> 
> In order to prevent database corruption, SQLite embargos all
> file close operations until all locks on that same file (possibly
> held by different threads) have cleared.
> 
> See http://www.sqlite.org/cvstrac/tktview?tn=561 and
> http://www.sqlite.org/cvstrac/chngview?cn=1171 for additional
> information.
> --
> D. Richard Hipp   <[EMAIL PROTECTED]>


__________________________________________________
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