This is essentially a backout of bug 506805, followed by changing the locking
protection rules to only protect mCancelRequested writing on the calling thread,
and reading on the background thread.
--HG--
extra : rebase_source : 249a61e40c2fd140527f034e36e8c1a53518baac
(was "test_browserGlue_corrupt_nobackup_default.js, test_browserGlue_corrupt_nobackup.js, test_browserGlue_shutdown.js randomly crash")
Fixes a race condition with asynchronous statements that causes a crash. We do
not always have access to the background thread, so we should not assume we
always can get it.
This removes the use of the shared mutex in AsyncExecuteStatements. We now rely
on PR_AtomicSet and the volatile keyword. This results in zero lock contention
between the calling thread and the background thread if cancel is ever called.
r=asuth
r=bent
sr=vlad
This fixes the code to use functions that expect milliseconds instead of
microseconds, and updates to use the new TimeStamp and TimeDuration class.
r=asuth
Stop calling any SQLite functions that would acquire the database mutex inside
Connection::ExecuteAsync. Additionally, do not actually bind parameters when
the binding functions are called, but rather when we execute (so for async
statements, that will happen on the background thread creating no mutex
contention with the main thread).
r=asuth
r=sdwilsh
Moving JSValStorageStatementBinder to mozStoragePrivateHelpers as bindJSValue
storage/src/mozStorageStatementParams.h: At global scope:
storage/src/mozStorageStatementParams.h:78: warning: ‘PRBool mozilla::storage::JSValStorageStatementBinder(JSContext*, mozIStorageStatement*, int, jsval)’ defined but not used
storage/src/mozStorageStatementParams.h:78: warning: ‘PRBool mozilla::storage::JSValStorageStatementBinder(JSContext*, mozIStorageStatement*, int, jsval)’ defined but not used
You get this once for each file that includes a header that defines a static function which is not used in that file.
Part 1: Create helper objects to make using sqlite3_mutex safer and easier.
r=cjones
--HG--
rename : xpcom/tests/TestDeadlockDetector.cpp => storage/test/test_deadlock_detector.cpp
This changes the location bar's AutoComplete provider to use asynchronous
queries instead of synchronous ones. No more blocking the main thread FTW!
r=mak
r=Mardak
r=dietrich
Improves the asynchronous API by allowing multiple parameters to be bound before
executing it. The statement is then executed with each set of parameters
asynchronously.
r=asuth
sr=vlad
This gets rid of the old, unused native code test file for storage. It adds two
more test files which test our C++ helper classes to ensure that they behave as
advertised. Also fixes a bug found in mozStorageTransaction that was uncovered
while writing these tests.
r=asuth
This exposes the templated nsIVariant implementation that storage uses
internally so that consumers can use it as well.
r=bsmedberg
--HG--
rename : storage/src/mozStorageVariant.cpp => storage/src/Variant.cpp
rename : storage/src/mozStorageVariant.h => storage/src/Variant.h
This adds support for blobs in variantToSQLiteT which means that functions can
no return blobs, as well as future consumers of variantToSQLiteT.
r=asuth