зеркало из https://github.com/mozilla/gecko-dev.git
Fix NSPR_LOCK ifdefs (for JS_NO_THIN_LOCKS mode, enabled due to a configure.in bug on gcc/sparc5 systems). Fixes speedracer build bustage.
This commit is contained in:
Родитель
0e3fd5e8ba
Коммит
b4b7a14cc7
|
@ -49,9 +49,11 @@
|
||||||
#include "jspubtd.h"
|
#include "jspubtd.h"
|
||||||
#include "jslock.h"
|
#include "jslock.h"
|
||||||
|
|
||||||
|
#define ReadWord(W) (W)
|
||||||
|
|
||||||
#ifndef NSPR_LOCK
|
#ifndef NSPR_LOCK
|
||||||
|
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
static PRLock **global_locks;
|
static PRLock **global_locks;
|
||||||
static uint32 global_lock_count = 1;
|
static uint32 global_lock_count = 1;
|
||||||
|
@ -74,15 +76,11 @@ js_UnlockGlobal(void *id)
|
||||||
PR_Unlock(global_locks[i]);
|
PR_Unlock(global_locks[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ReadWord(W) (W)
|
|
||||||
|
|
||||||
#if !defined(NSPR_LOCK)
|
|
||||||
|
|
||||||
/* Exclude Alpha NT. */
|
/* Exclude Alpha NT. */
|
||||||
#if defined(_WIN32) && defined(_M_IX86)
|
#if defined(_WIN32) && defined(_M_IX86)
|
||||||
#pragma warning( disable : 4035 )
|
#pragma warning( disable : 4035 )
|
||||||
|
|
||||||
JS_INLINE int
|
static JS_INLINE int
|
||||||
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
{
|
{
|
||||||
__asm {
|
__asm {
|
||||||
|
@ -98,7 +96,7 @@ js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
#elif defined(__GNUC__) && defined(__i386__)
|
#elif defined(__GNUC__) && defined(__i386__)
|
||||||
|
|
||||||
/* Note: This fails on 386 cpus, cmpxchgl is a >= 486 instruction */
|
/* Note: This fails on 386 cpus, cmpxchgl is a >= 486 instruction */
|
||||||
JS_INLINE int
|
static JS_INLINE int
|
||||||
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
{
|
{
|
||||||
unsigned int res;
|
unsigned int res;
|
||||||
|
@ -116,7 +114,7 @@ js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
|
|
||||||
#elif defined(SOLARIS) && defined(sparc) && defined(ULTRA_SPARC)
|
#elif defined(SOLARIS) && defined(sparc) && defined(ULTRA_SPARC)
|
||||||
|
|
||||||
JS_INLINE int
|
static JS_INLINE int
|
||||||
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
{
|
{
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
@ -144,7 +142,7 @@ mov 0,%0\n\
|
||||||
|
|
||||||
#include <sys/atomic_op.h>
|
#include <sys/atomic_op.h>
|
||||||
|
|
||||||
JS_INLINE int
|
static JS_INLINE int
|
||||||
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
{
|
{
|
||||||
return !_check_lock((atomic_p)w, ov, nv);
|
return !_check_lock((atomic_p)w, ov, nv);
|
||||||
|
@ -156,7 +154,7 @@ js_CompareAndSwap(jsword *w, jsword ov, jsword nv)
|
||||||
|
|
||||||
#endif /* arch-tests */
|
#endif /* arch-tests */
|
||||||
|
|
||||||
#endif /* !defined(NSPR_LOCK) */
|
#endif /* !NSPR_LOCK */
|
||||||
|
|
||||||
jsword
|
jsword
|
||||||
js_CurrentThreadId()
|
js_CurrentThreadId()
|
||||||
|
@ -546,6 +544,8 @@ js_SetSlotThreadSafe(JSContext *cx, JSObject *obj, uint32 slot, jsval v)
|
||||||
js_UnlockScope(cx, scope);
|
js_UnlockScope(cx, scope);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NSPR_LOCK
|
||||||
|
|
||||||
static JSFatLock *
|
static JSFatLock *
|
||||||
NewFatlock()
|
NewFatlock()
|
||||||
{
|
{
|
||||||
|
@ -637,9 +637,12 @@ PutFatlock(JSFatLock *m, void *id)
|
||||||
fl_list_table[i].free = m;
|
fl_list_table[i].free = m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* !NSPR_LOCK */
|
||||||
|
|
||||||
JSBool
|
JSBool
|
||||||
js_SetupLocks(int l, int g)
|
js_SetupLocks(int l, int g)
|
||||||
{
|
{
|
||||||
|
#ifndef NSPR_LOCK
|
||||||
uint32 i;
|
uint32 i;
|
||||||
|
|
||||||
if (global_locks)
|
if (global_locks)
|
||||||
|
@ -681,6 +684,7 @@ js_SetupLocks(int l, int g)
|
||||||
}
|
}
|
||||||
fl_list_table[i].taken = NULL;
|
fl_list_table[i].taken = NULL;
|
||||||
}
|
}
|
||||||
|
#endif /* !NSPR_LOCK */
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -690,6 +694,7 @@ extern void js_FinishDtoa(void);
|
||||||
void
|
void
|
||||||
js_CleanupLocks()
|
js_CleanupLocks()
|
||||||
{
|
{
|
||||||
|
#ifndef NSPR_LOCK
|
||||||
uint32 i;
|
uint32 i;
|
||||||
|
|
||||||
if (global_locks) {
|
if (global_locks) {
|
||||||
|
@ -712,6 +717,7 @@ js_CleanupLocks()
|
||||||
fl_list_table = NULL;
|
fl_list_table = NULL;
|
||||||
fl_list_table_len = 0;
|
fl_list_table_len = 0;
|
||||||
}
|
}
|
||||||
|
#endif /* !NSPR_LOCK */
|
||||||
js_FinishDtoa();
|
js_FinishDtoa();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -722,6 +728,8 @@ js_InitContextForLocking(JSContext *cx)
|
||||||
JS_ASSERT(Thin_GetWait(cx->thread) == 0);
|
JS_ASSERT(Thin_GetWait(cx->thread) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NSPR_LOCK
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fast locking and unlocking is implemented by delaying the allocation of a
|
* Fast locking and unlocking is implemented by delaying the allocation of a
|
||||||
* system lock (fat lock) until contention. As long as a locking thread A
|
* system lock (fat lock) until contention. As long as a locking thread A
|
||||||
|
@ -837,7 +845,7 @@ js_Dequeue(JSThinLock *tl)
|
||||||
js_ResumeThread(tl);
|
js_ResumeThread(tl);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_INLINE void
|
static JS_INLINE void
|
||||||
js_Lock(JSThinLock *tl, jsword me)
|
js_Lock(JSThinLock *tl, jsword me)
|
||||||
{
|
{
|
||||||
JS_ASSERT(me == CurrentThreadId());
|
JS_ASSERT(me == CurrentThreadId());
|
||||||
|
@ -851,7 +859,7 @@ js_Lock(JSThinLock *tl, jsword me)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_INLINE void
|
static JS_INLINE void
|
||||||
js_Unlock(JSThinLock *tl, jsword me)
|
js_Unlock(JSThinLock *tl, jsword me)
|
||||||
{
|
{
|
||||||
JS_ASSERT(me == CurrentThreadId());
|
JS_ASSERT(me == CurrentThreadId());
|
||||||
|
@ -865,6 +873,8 @@ js_Unlock(JSThinLock *tl, jsword me)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* !NSPR_LOCK */
|
||||||
|
|
||||||
void
|
void
|
||||||
js_LockRuntime(JSRuntime *rt)
|
js_LockRuntime(JSRuntime *rt)
|
||||||
{
|
{
|
||||||
|
|
|
@ -148,9 +148,6 @@ typedef struct JSFatLockTable {
|
||||||
js_TransferScopeLock(cx, scope, newscope)
|
js_TransferScopeLock(cx, scope, newscope)
|
||||||
|
|
||||||
extern jsword js_CurrentThreadId();
|
extern jsword js_CurrentThreadId();
|
||||||
extern JS_INLINE void js_Lock(JSThinLock *, jsword);
|
|
||||||
extern JS_INLINE void js_Unlock(JSThinLock *, jsword);
|
|
||||||
extern int js_CompareAndSwap(jsword *, jsword, jsword);
|
|
||||||
extern void js_LockRuntime(JSRuntime *rt);
|
extern void js_LockRuntime(JSRuntime *rt);
|
||||||
extern void js_UnlockRuntime(JSRuntime *rt);
|
extern void js_UnlockRuntime(JSRuntime *rt);
|
||||||
extern void js_LockObj(JSContext *cx, JSObject *obj);
|
extern void js_LockObj(JSContext *cx, JSObject *obj);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче