gecko-dev/xpcom/base/nsISupportsImpl.cpp
Nathan Froyd 8bbd081c88 Bug 1359415 - move threadsafety checks inside nsAutoOwningThread; r=erahm
This change moves most of the logic for the threadsafety check into
nsAutoOwningThread, rather than having part of the logic live in
nsAutoOwningThread and part of the logic live in nsDebug.h.  Changing
this also forces us to clean up a couple of places that replicated the
logic that lived in nsDebug.h as well.
2017-04-26 11:41:32 -04:00

40 lines
1.1 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsISupportsImpl.h"
#include "mozilla/Assertions.h"
nsresult NS_FASTCALL
NS_TableDrivenQI(void* aThis, REFNSIID aIID, void** aInstancePtr,
const QITableEntry* aEntries)
{
do {
if (aIID.Equals(*aEntries->iid)) {
nsISupports* r = reinterpret_cast<nsISupports*>(
reinterpret_cast<char*>(aThis) + aEntries->offset);
NS_ADDREF(r);
*aInstancePtr = r;
return NS_OK;
}
++aEntries;
} while (aEntries->iid);
*aInstancePtr = nullptr;
return NS_ERROR_NO_INTERFACE;
}
#ifdef MOZ_THREAD_SAFETY_OWNERSHIP_CHECKS_SUPPORTED
void
nsAutoOwningThread::AssertCurrentThreadOwnsMe(const char* msg) const
{
if (MOZ_UNLIKELY(mThread != PR_GetCurrentThread())) {
// `msg` is a string literal by construction.
MOZ_CRASH_UNSAFE_OOL(msg);
}
}
#endif