Bug 1382555 - Add more diagnostic asserts to nsHtttpConnectionMgr. r=mcmanus

This commit is contained in:
Dragana Damjanovic dd.mozilla@gmail.com 2017-07-24 16:24:33 +02:00
Родитель 2a757d9ae7
Коммит bfaf919c95
2 изменённых файлов: 42 добавлений и 3 удалений

Просмотреть файл

@ -789,8 +789,9 @@ nsHttpConnectionMgr::UpdateCoalescingForNewConn(nsHttpConnection *newConn,
MOZ_ASSERT(OnSocketThread(), "not on socket thread");
MOZ_ASSERT(newConn);
MOZ_ASSERT(newConn->ConnectionInfo());
MOZ_ASSERT(ent);
MOZ_DIAGNOSTIC_ASSERT(ent);
MOZ_ASSERT(mCT.GetWeak(newConn->ConnectionInfo()->HashKey()) == ent);
CheckConnEntryMustBeInmCT(ent->mConnInfo);
nsHttpConnection *existingConn = FindCoalescableConnection(ent, true);
if (existingConn) {
@ -1253,6 +1254,7 @@ nsHttpConnectionMgr::AtActiveConnectionLimit(nsConnectionEntry *ent, uint32_t ca
void
nsHttpConnectionMgr::ClosePersistentConnections(nsConnectionEntry *ent)
{
CheckConnEntryMustBeInmCT(ent->mConnInfo);
LOG(("nsHttpConnectionMgr::ClosePersistentConnections [ci=%s]\n",
ent->mConnInfo->HashKey().get()));
while (ent->mIdleConns.Length()) {
@ -1661,6 +1663,7 @@ nsHttpConnectionMgr::DispatchTransaction(nsConnectionEntry *ent,
nsHttpTransaction *trans,
nsHttpConnection *conn)
{
CheckConnEntryMustBeInmCT(ent->mConnInfo);
uint32_t caps = trans->Caps();
int32_t priority = trans->Priority();
nsresult rv;
@ -1756,6 +1759,7 @@ nsHttpConnectionMgr::DispatchAbstractTransaction(nsConnectionEntry *ent,
int32_t priority)
{
MOZ_DIAGNOSTIC_ASSERT(ent);
CheckConnEntryMustBeInmCT(ent->mConnInfo);
nsresult rv;
MOZ_ASSERT(!conn->UsingSpdy(),
"Spdy Must Not Use DispatchAbstractTransaction");
@ -1904,6 +1908,7 @@ void
nsHttpConnectionMgr::AddActiveConn(nsHttpConnection *conn,
nsConnectionEntry *ent)
{
CheckConnEntryMustBeInmCT(ent->mConnInfo);
ent->mActiveConns.AppendElement(conn);
mNumActiveConns++;
ActivateTimeoutTick();
@ -2091,7 +2096,8 @@ nsHttpConnection *
nsHttpConnectionMgr::GetSpdyActiveConn(nsConnectionEntry *ent)
{
MOZ_ASSERT(OnSocketThread(), "not on socket thread");
MOZ_ASSERT(ent);
MOZ_DIAGNOSTIC_ASSERT(ent);
CheckConnEntryMustBeInmCT(ent->mConnInfo);
nsHttpConnection *experienced = nullptr;
nsHttpConnection *noExperience = nullptr;
@ -2413,6 +2419,7 @@ nsHttpConnectionMgr::OnMsgCancelTransaction(int32_t reason, ARefBase *param)
for (uint32_t index = 0;
ent && (index < ent->mActiveConns.Length());
++index) {
CheckConnEntryMustBeInmCT(ent->mConnInfo);
nsHttpConnection *activeConn = ent->mActiveConns[index];
nsAHttpTransaction *liveTransaction = activeConn->Transaction();
if (liveTransaction && liveTransaction->IsNullTransaction()) {
@ -4061,6 +4068,7 @@ nsHalfOpenSocket::OnOutputStreamReady(nsIAsyncOutputStream *out)
MOZ_DIAGNOSTIC_ASSERT(out == mStreamOut || out == mBackupStreamOut,
"stream mismatch");
MOZ_DIAGNOSTIC_ASSERT(mEnt);
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
LOG(("nsHalfOpenSocket::OnOutputStreamReady [this=%p ent=%s %s]\n",
this, mEnt->mConnInfo->Origin(),
@ -4119,7 +4127,9 @@ nsHalfOpenSocket::OnOutputStreamReady(nsIAsyncOutputStream *out)
mFastOpenInProgress = false;
mConnectionNegotiatingFastOpen = nullptr;
}
MOZ_DIAGNOSTIC_ASSERT(mEnt);
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
nsresult rv = SetupConn(out, false);
if (mEnt) {
mEnt->mDoNotDestroy = false;
@ -4135,6 +4145,8 @@ nsHalfOpenSocket::FastOpenEnabled()
MOZ_DIAGNOSTIC_ASSERT(mEnt);
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
if (!mEnt) {
return false;
}
@ -4187,12 +4199,15 @@ nsHalfOpenSocket::StartFastOpen()
MOZ_DIAGNOSTIC_ASSERT(!mBackupTransport);
MOZ_DIAGNOSTIC_ASSERT(mEnt);
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
LOG(("nsHalfOpenSocket::StartFastOpen [this=%p]\n",
this));
RefPtr<nsHalfOpenSocket> deleteProtector(this);
mFastOpenInProgress = true;
mEnt->mDoNotDestroy = true;
// Remove this HalfOpen from mEnt->mHalfOpens.
// The new connection will take care of closing this HalfOpen from now on!
if (!mEnt->mHalfOpens.RemoveElement(this)) {
@ -4206,7 +4221,7 @@ nsHalfOpenSocket::StartFastOpen()
Abandon();
return NS_ERROR_ABORT;
}
mEnt->mDoNotDestroy = true;
MOZ_ASSERT(gHttpHandler->ConnMgr()->mNumHalfOpenConns);
if (gHttpHandler->ConnMgr()->mNumHalfOpenConns) { // just in case
gHttpHandler->ConnMgr()->mNumHalfOpenConns--;
@ -4243,6 +4258,9 @@ nsHalfOpenSocket::StartFastOpen()
} else {
LOG(("nsHalfOpenSocket::StartFastOpen [this=%p conn=%p]\n",
this, mConnectionNegotiatingFastOpen.get()));
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
mEnt->mHalfOpenFastOpenBackups.AppendElement(this);
// SetupBackupTimer should setup timer which will hold a ref to this
// halfOpen. It will failed only if it cannot create timer. Anyway just
@ -4267,6 +4285,8 @@ nsHalfOpenSocket::SetFastOpenConnected(nsresult aError, bool aWillRetry)
MOZ_DIAGNOSTIC_ASSERT(mFastOpenInProgress);
MOZ_DIAGNOSTIC_ASSERT(mEnt);
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
LOG(("nsHalfOpenSocket::SetFastOpenConnected [this=%p conn=%p error=%x]\n",
this, mConnectionNegotiatingFastOpen.get(),
static_cast<uint32_t>(aError)));
@ -4327,6 +4347,7 @@ nsHalfOpenSocket::SetFastOpenConnected(nsresult aError, bool aWillRetry)
// mConnectionNegotiatingFastOpen is going away and halfOpen is taking
// this mSocketTransport so add halfOpen to mEnt and update
// mNumActiveConns.
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
mEnt->mHalfOpens.AppendElement(this);
gHttpHandler->ConnMgr()->mNumHalfOpenConns++;
gHttpHandler->ConnMgr()->StartedConnect();
@ -4385,6 +4406,8 @@ nsHalfOpenSocket::CancelFastOpenConnection()
LOG(("nsHalfOpenSocket::CancelFastOpenConnection [this=%p conn=%p]\n",
this, mConnectionNegotiatingFastOpen.get()));
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
RefPtr<nsHalfOpenSocket> deleteProtector(this);
mEnt->mHalfOpenFastOpenBackups.RemoveElement(this);
mSocketTransport->SetFastOpenCallback(nullptr);
@ -4594,6 +4617,7 @@ nsHalfOpenSocket::SetupConn(nsIAsyncOutputStream *out,
MOZ_DIAGNOSTIC_ASSERT(static_cast<int32_t>(mEnt->mIdleConns.IndexOf(conn)) == -1);
int32_t idx = mEnt->mActiveConns.IndexOf(conn);
if (NS_SUCCEEDED(rv) && (idx != -1)) {
gHttpHandler->ConnMgr()->CheckConnEntryMustBeInmCT(mEnt->mConnInfo);
mConnectionNegotiatingFastOpen = conn;
} else {
conn->SetFastOpen(false);
@ -5153,5 +5177,17 @@ nsHttpConnectionMgr::MoveToWildCardConnEntry(nsHttpConnectionInfo *specificCI,
}
}
void
nsHttpConnectionMgr::CheckConnEntryMustBeInmCT(nsHttpConnectionInfo *ci)
{
nsConnectionEntry *ent = mCT.GetWeak(ci->HashKey());
MOZ_DIAGNOSTIC_ASSERT(ent);
if (ent->mHowItWasRemoved == nsConnectionEntry::CONN_ENTRY_CLEAR_CONNECTION_HISTORY) {
MOZ_DIAGNOSTIC_ASSERT(false);
} else if (ent->mHowItWasRemoved == nsConnectionEntry::CONN_ENTRY_REMOVED_SHUTDOWN) {
MOZ_DIAGNOSTIC_ASSERT(false);
}
}
} // namespace net
} // namespace mozilla

Просмотреть файл

@ -747,6 +747,9 @@ private:
nsTArray<RefPtr<PendingTransactionInfo>>*
GetTransactionPendingQHelper(nsConnectionEntry *ent, nsAHttpTransaction *trans);
// This is only a diagnostic check end it will e removed soon.
void CheckConnEntryMustBeInmCT(nsHttpConnectionInfo *ci);
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsHttpConnectionMgr::nsHalfOpenSocket, NS_HALFOPENSOCKET_IID)