mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-04-16 13:01:02 +00:00

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.
40 lines
1.1 KiB
C++
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
|