зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1309527
- Fix the race condition to prevent the access of metadata in both PBackground thread and the Connection thread. r=janv
This commit is contained in:
Родитель
e8f0bc4a89
Коммит
3af6bacb93
|
@ -7915,16 +7915,18 @@ class RenameObjectStoreOp final
|
||||||
{
|
{
|
||||||
friend class VersionChangeTransaction;
|
friend class VersionChangeTransaction;
|
||||||
|
|
||||||
const RefPtr<FullObjectStoreMetadata> mMetadata;
|
const int64_t mId;
|
||||||
|
const nsString mNewName;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Only created by VersionChangeTransaction.
|
// Only created by VersionChangeTransaction.
|
||||||
RenameObjectStoreOp(VersionChangeTransaction* aTransaction,
|
RenameObjectStoreOp(VersionChangeTransaction* aTransaction,
|
||||||
FullObjectStoreMetadata* const aMetadata)
|
FullObjectStoreMetadata* const aMetadata)
|
||||||
: VersionChangeTransactionOp(aTransaction)
|
: VersionChangeTransactionOp(aTransaction)
|
||||||
, mMetadata(aMetadata)
|
, mId(aMetadata->mCommonMetadata.id())
|
||||||
|
, mNewName(aMetadata->mCommonMetadata.name())
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aMetadata->mCommonMetadata.id());
|
MOZ_ASSERT(mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
~RenameObjectStoreOp()
|
~RenameObjectStoreOp()
|
||||||
|
@ -8109,8 +8111,9 @@ class RenameIndexOp final
|
||||||
{
|
{
|
||||||
friend class VersionChangeTransaction;
|
friend class VersionChangeTransaction;
|
||||||
|
|
||||||
const RefPtr<FullIndexMetadata> mMetadata;
|
|
||||||
const int64_t mObjectStoreId;
|
const int64_t mObjectStoreId;
|
||||||
|
const int64_t mIndexId;
|
||||||
|
const nsString mNewName;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Only created by VersionChangeTransaction.
|
// Only created by VersionChangeTransaction.
|
||||||
|
@ -8118,10 +8121,11 @@ private:
|
||||||
FullIndexMetadata* const aMetadata,
|
FullIndexMetadata* const aMetadata,
|
||||||
int64_t aObjectStoreId)
|
int64_t aObjectStoreId)
|
||||||
: VersionChangeTransactionOp(aTransaction)
|
: VersionChangeTransactionOp(aTransaction)
|
||||||
, mMetadata(aMetadata)
|
|
||||||
, mObjectStoreId(aObjectStoreId)
|
, mObjectStoreId(aObjectStoreId)
|
||||||
|
, mIndexId(aMetadata->mCommonMetadata.id())
|
||||||
|
, mNewName(aMetadata->mCommonMetadata.name())
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aMetadata->mCommonMetadata.id());
|
MOZ_ASSERT(mIndexId);
|
||||||
}
|
}
|
||||||
|
|
||||||
~RenameIndexOp()
|
~RenameIndexOp()
|
||||||
|
@ -24396,12 +24400,10 @@ RenameObjectStoreOp::DoDatabaseWork(DatabaseConnection* aConnection)
|
||||||
&stmt));
|
&stmt));
|
||||||
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(
|
MOZ_ALWAYS_SUCCEEDS(
|
||||||
stmt->BindStringByName(NS_LITERAL_CSTRING("name"),
|
stmt->BindStringByName(NS_LITERAL_CSTRING("name"), mNewName));
|
||||||
mMetadata->mCommonMetadata.name()));
|
|
||||||
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(
|
MOZ_ALWAYS_SUCCEEDS(
|
||||||
stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"),
|
stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"), mId));
|
||||||
mMetadata->mCommonMetadata.id()));
|
|
||||||
|
|
||||||
bool hasResult;
|
bool hasResult;
|
||||||
MOZ_ALWAYS_SUCCEEDS(stmt->ExecuteStep(&hasResult));
|
MOZ_ALWAYS_SUCCEEDS(stmt->ExecuteStep(&hasResult));
|
||||||
|
@ -24425,15 +24427,13 @@ RenameObjectStoreOp::DoDatabaseWork(DatabaseConnection* aConnection)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("name"),
|
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("name"), mNewName);
|
||||||
mMetadata->mCommonMetadata.name());
|
|
||||||
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"),
|
rv = stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"), mId);
|
||||||
mMetadata->mCommonMetadata.id());
|
|
||||||
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -25506,12 +25506,10 @@ RenameIndexOp::DoDatabaseWork(DatabaseConnection* aConnection)
|
||||||
mObjectStoreId));
|
mObjectStoreId));
|
||||||
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(
|
MOZ_ALWAYS_SUCCEEDS(
|
||||||
stmt->BindStringByName(NS_LITERAL_CSTRING("name"),
|
stmt->BindStringByName(NS_LITERAL_CSTRING("name"), mNewName));
|
||||||
mMetadata->mCommonMetadata.name()));
|
|
||||||
|
|
||||||
MOZ_ALWAYS_SUCCEEDS(
|
MOZ_ALWAYS_SUCCEEDS(
|
||||||
stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"),
|
stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"), mIndexId));
|
||||||
mMetadata->mCommonMetadata.id()));
|
|
||||||
|
|
||||||
bool hasResult;
|
bool hasResult;
|
||||||
MOZ_ALWAYS_SUCCEEDS(stmt->ExecuteStep(&hasResult));
|
MOZ_ALWAYS_SUCCEEDS(stmt->ExecuteStep(&hasResult));
|
||||||
|
@ -25537,15 +25535,13 @@ RenameIndexOp::DoDatabaseWork(DatabaseConnection* aConnection)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("name"),
|
rv = stmt->BindStringByName(NS_LITERAL_CSTRING("name"), mNewName);
|
||||||
mMetadata->mCommonMetadata.name());
|
|
||||||
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"),
|
rv = stmt->BindInt64ByName(NS_LITERAL_CSTRING("id"), mIndexId);
|
||||||
mMetadata->mCommonMetadata.id());
|
|
||||||
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
[idbindex-rename.html]
|
|
||||||
type: testharness
|
|
||||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1309527
|
|
||||||
expected:
|
|
||||||
if debug and not e10s and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64): CRASH
|
|
||||||
if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if debug and not e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if debug and e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
|
|
||||||
if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if debug and not e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
|
|
||||||
if debug and e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
|
|
|
@ -1,22 +0,0 @@
|
||||||
[idbobjectstore-rename-store.html]
|
|
||||||
type: testharness
|
|
||||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1309527
|
|
||||||
expected:
|
|
||||||
if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if debug and not e10s and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if debug and e10s and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if debug and e10s and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64): CRASH
|
|
||||||
if not debug and e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
|
||||||
if debug and e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
|
|
||||||
if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
|
|
||||||
if not debug and not e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
|
||||||
if debug and not e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
|
|
||||||
[IndexedDB object store can be renamed to "\\u0000"]
|
|
||||||
expected:
|
|
||||||
if not debug and not e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
|
||||||
|
|
||||||
[IndexedDB object store can be renamed to "\\uDC00\\uD800"]
|
|
||||||
expected:
|
|
||||||
if not debug and e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): TIMEOUT
|
|
||||||
if not debug and not e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): NOTRUN
|
|
||||||
|
|
|
@ -38463,6 +38463,20 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"testharness": {
|
"testharness": {
|
||||||
|
"IndexedDB/idbindex-rename.html": [
|
||||||
|
{
|
||||||
|
"path": "IndexedDB/idbindex-rename.html",
|
||||||
|
"timeout": "long",
|
||||||
|
"url": "/IndexedDB/idbindex-rename.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"IndexedDB/idbobjectstore-rename-store.html": [
|
||||||
|
{
|
||||||
|
"path": "IndexedDB/idbobjectstore-rename-store.html",
|
||||||
|
"timeout": "long",
|
||||||
|
"url": "/IndexedDB/idbobjectstore-rename-store.html"
|
||||||
|
}
|
||||||
|
],
|
||||||
"WebCryptoAPI/generateKey/failures_AES-CBC.worker.js": [
|
"WebCryptoAPI/generateKey/failures_AES-CBC.worker.js": [
|
||||||
{
|
{
|
||||||
"path": "WebCryptoAPI/generateKey/failures_AES-CBC.worker.js",
|
"path": "WebCryptoAPI/generateKey/failures_AES-CBC.worker.js",
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<title>IndexedDB: index renaming support</title>
|
<title>IndexedDB: index renaming support</title>
|
||||||
<link rel="help"
|
<link rel="help"
|
||||||
href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
|
href="https://w3c.github.io/IndexedDB/#dom-idbindex-name">
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<title>IndexedDB: object store renaming support</title>
|
<title>IndexedDB: object store renaming support</title>
|
||||||
<link rel="help"
|
<link rel="help"
|
||||||
href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
|
href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
|
||||||
|
|
Загрузка…
Ссылка в новой задаче