mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 944438 - Get rid of InstallSignalHandlersMutex; r=luke
This commit is contained in:
parent
527be3cbdd
commit
8c249fbd1c
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user