blob: 7ca6474aba7da289637e9b6485ef2c5bf22e0c0e [file] [log] [blame]
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* vim: set ts=8 sts=4 et sw=4 tw=99:
* 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/. */
#ifndef vm_PosixNSPR_h
#define vm_PosixNSPR_h
#ifdef JS_POSIX_NSPR
#include <pthread.h>
#include <stdint.h>
namespace nspr {
class Thread;
class Lock;
class CondVar;
};
typedef nspr::Thread PRThread;
typedef nspr::Lock PRLock;
typedef nspr::CondVar PRCondVar;
enum PRThreadType {
PR_USER_THREAD,
PR_SYSTEM_THREAD
};
enum PRThreadPriority
{
PR_PRIORITY_FIRST = 0,
PR_PRIORITY_LOW = 0,
PR_PRIORITY_NORMAL = 1,
PR_PRIORITY_HIGH = 2,
PR_PRIORITY_URGENT = 3,
PR_PRIORITY_LAST = 3
};
enum PRThreadScope {
PR_LOCAL_THREAD,
PR_GLOBAL_THREAD,
PR_GLOBAL_BOUND_THREAD
};
enum PRThreadState {
PR_JOINABLE_THREAD,
PR_UNJOINABLE_THREAD
};
PRThread*
PR_CreateThread(PRThreadType type,
void (*start)(void* arg),
void* arg,
PRThreadPriority priority,
PRThreadScope scope,
PRThreadState state,
uint32_t stackSize);
typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
PRStatus
PR_JoinThread(PRThread* thread);
PRThread*
PR_GetCurrentThread();
PRStatus
PR_SetCurrentThreadName(const char* name);
typedef void (*PRThreadPrivateDTOR)(void* priv);
PRStatus
PR_NewThreadPrivateIndex(unsigned* newIndex, PRThreadPrivateDTOR destructor);
PRStatus
PR_SetThreadPrivate(unsigned index, void* priv);
void*
PR_GetThreadPrivate(unsigned index);
struct PRCallOnceType {
int initialized;
int32_t inProgress;
PRStatus status;
};
typedef PRStatus (*PRCallOnceFN)();
PRStatus
PR_CallOnce(PRCallOnceType* once, PRCallOnceFN func);
typedef PRStatus (*PRCallOnceWithArgFN)(void*);
PRStatus
PR_CallOnceWithArg(PRCallOnceType* once, PRCallOnceWithArgFN func, void* arg);
PRLock*
PR_NewLock();
void
PR_DestroyLock(PRLock* lock);
void
PR_Lock(PRLock* lock);
PRStatus
PR_Unlock(PRLock* lock);
PRCondVar*
PR_NewCondVar(PRLock* lock);
void
PR_DestroyCondVar(PRCondVar* cvar);
PRStatus
PR_NotifyCondVar(PRCondVar* cvar);
PRStatus
PR_NotifyAllCondVar(PRCondVar* cvar);
#define PR_INTERVAL_MIN 1000UL
#define PR_INTERVAL_MAX 100000UL
#define PR_INTERVAL_NO_WAIT 0UL
#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
uint32_t
PR_MillisecondsToInterval(uint32_t milli);
uint32_t
PR_MicrosecondsToInterval(uint32_t micro);
uint32_t
PR_TicksPerSecond();
PRStatus
PR_WaitCondVar(PRCondVar* cvar, uint32_t timeout);
#endif /* JS_POSIX_NSPR */
#endif /* vm_PosixNSPR_h */