Bug 944438 - Get rid of InstallSignalHandlersMutex; r=luke

This commit is contained in:
Catalin Iacob 2013-11-25 16:37:24 +01:00
parent 527be3cbdd
commit 8c249fbd1c

View File

@ -187,71 +187,6 @@ class AutoSetHandlingSignal
}
};
// For platforms that install a single, process-wide signal handler (Unix and
// Windows), the InstallSignalHandlersMutex prevents races between JSRuntimes
// installing signal handlers.
#if !defined(XP_MACOSX)
# if defined(JS_THREADSAFE)
# include "jslock.h"
namespace {
class InstallSignalHandlersMutex
{
PRLock *mutex_;
public:
InstallSignalHandlersMutex() {
mutex_ = PR_NewLock();
if (!mutex_)
MOZ_CRASH();
}
~InstallSignalHandlersMutex() {
PR_DestroyLock(mutex_);
}
class Lock {
static bool sHandlersInstalled;
public:
Lock();
~Lock();
bool handlersInstalled() const { return sHandlersInstalled; }
void setHandlersInstalled() { sHandlersInstalled = true; }
};
} signalMutex;
} /* anonymous namespace */
bool InstallSignalHandlersMutex::Lock::sHandlersInstalled = false;
InstallSignalHandlersMutex::Lock::Lock()
{
PR_Lock(signalMutex.mutex_);
}
InstallSignalHandlersMutex::Lock::~Lock()
{
PR_Unlock(signalMutex.mutex_);
}
# else // JS_THREADSAFE
namespace {
struct InstallSignalHandlersMutex
{
class Lock {
static bool sHandlersInstalled;
public:
Lock() { (void)this; }
bool handlersInstalled() const { return sHandlersInstalled; }
void setHandlersInstalled() { sHandlersInstalled = true; }
};
};
} /* anonymous namespace */
bool InstallSignalHandlersMutex::Lock::sHandlersInstalled = false;
# endif // JS_THREADSAFE
#endif // !XP_MACOSX
#if defined(JS_CPU_X64)
template <class T>
static void
@ -993,6 +928,8 @@ AsmJSFaultHandler(int signum, siginfo_t *info, void *context)
}
#endif
static bool sHandlersInstalled = false;
bool
js::EnsureAsmJSSignalHandlersInstalled(JSRuntime *rt)
{
@ -1005,8 +942,7 @@ js::EnsureAsmJSSignalHandlersInstalled(JSRuntime *rt)
#else
// Assume Windows or Unix. For these platforms, there is a single,
// process-wide signal handler installed. Take care to only install it once.
InstallSignalHandlersMutex::Lock lock;
if (lock.handlersInstalled())
if (sHandlersInstalled)
return true;
# if defined(XP_WIN)
@ -1024,7 +960,7 @@ js::EnsureAsmJSSignalHandlersInstalled(JSRuntime *rt)
return false;
# endif
lock.setHandlersInstalled();
sHandlersInstalled = true;
#endif
return true;
}