Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: nspr/pr/include/private/primpl.h

Issue 200653003: Update to NSPR 4.10.4. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/nss/
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « nspr/pr/include/prinit.h ('k') | nspr/pr/src/md/windows/w95thred.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: nspr/pr/include/private/primpl.h
===================================================================
--- nspr/pr/include/private/primpl.h (revision 257452)
+++ nspr/pr/include/private/primpl.h (working copy)
@@ -539,6 +539,8 @@
_PR_MD_UNLOCK(&(_lock)->ilock);
extern void _PR_UnblockLockWaiter(PRLock *lock);
+extern PRStatus _PR_InitLock(PRLock *lock);
+extern void _PR_FreeLock(PRLock *lock);
#define _PR_LOCK_PTR(_qp) \
((PRLock*) ((char*) (_qp) - offsetof(PRLock,links)))
@@ -550,8 +552,11 @@
#define _PR_CVAR_UNLOCK(_cvar) \
_PR_MD_UNLOCK(&(_cvar)->ilock);
+extern PRStatus _PR_InitCondVar(PRCondVar *cvar, PRLock *lock);
+extern void _PR_FreeCondVar(PRCondVar *cvar);
extern PRStatus _PR_WaitCondVar(
PRThread *thread, PRCondVar *cvar, PRLock *lock, PRIntervalTime timeout);
+extern void _PR_NotifyCondVar(PRCondVar *cvar, PRThread *me);
extern PRUint32 _PR_CondVarToString(PRCondVar *cvar, char *buf, PRUint32 buflen);
NSPR_API(void) _PR_Notify(PRMonitor *mon, PRBool all, PRBool sticky);
@@ -1420,8 +1425,6 @@
#endif
};
-extern void _PR_InitLocks(void);
-
struct PRCondVar {
PRLock *lock; /* associated lock that protects the condition */
#if defined(_PR_PTHREADS)
@@ -1446,13 +1449,38 @@
struct PRMonitor {
const char* name; /* monitor name for debugging */
#if defined(_PR_PTHREADS)
- PRLock lock; /* the lock structure */
- pthread_t owner; /* the owner of the lock or invalid */
- PRCondVar *cvar; /* condition variable queue */
+ pthread_mutex_t lock; /* lock is only held when accessing fields
+ * of the PRMonitor, instead of being held
+ * while the monitor is entered. The only
+ * exception is notifyTimes, which is
+ * protected by the monitor. */
+ pthread_t owner; /* the owner of the monitor or invalid */
+ pthread_cond_t entryCV; /* for threads waiting to enter the monitor */
+
+ pthread_cond_t waitCV; /* for threads waiting on the monitor */
+ PRInt32 refCount; /* reference count, an atomic variable.
+ * PR_NewMonitor adds a reference to the
+ * newly created PRMonitor, and
+ * PR_DestroyMonitor releases that reference.
+ * PR_ExitMonitor adds a reference before
+ * unlocking the internal lock if it needs to
+ * signal entryCV, and releases the reference
+ * after signaling entryCV. */
#else /* defined(_PR_PTHREADS) */
- PRCondVar *cvar; /* associated lock and condition variable queue */
+ PRLock lock; /* lock is only held when accessing fields
+ * of the PRMonitor, instead of being held
+ * while the monitor is entered. The only
+ * exception is notifyTimes, which is
+ * protected by the monitor. */
+ PRThread *owner; /* the owner of the monitor or invalid */
+ PRCondVar entryCV; /* for threads waiting to enter the monitor */
+
+ PRCondVar waitCV; /* for threads waiting on the monitor */
#endif /* defined(_PR_PTHREADS) */
PRUint32 entryCount; /* # of times re-entered */
+ PRIntn notifyTimes; /* number of pending notifies for waitCV.
+ * The special value -1 means a broadcast
+ * (PR_NotifyAll). */
};
/************************************************************************/
@@ -1472,8 +1500,6 @@
#endif /* defined(_PR_BTHREADS) */
};
-NSPR_API(void) _PR_InitSem(void);
-
/*************************************************************************/
struct PRSem {
@@ -1555,6 +1581,8 @@
#if defined(_PR_PTHREADS)
pthread_t id; /* pthread identifier for the thread */
+ PRBool idSet; /* whether 'id' has been set. Protected by
+ * pt_book.ml. */
#ifdef _PR_NICE_PRIORITY_SCHEDULING
pid_t tid; /* Linux-specific kernel thread ID */
#endif
@@ -1745,6 +1773,7 @@
};
#endif /* MOZ_UNICODE */
+extern void _PR_InitLocks(void);
extern void _PR_InitSegs(void);
extern void _PR_InitStacks(void);
extern void _PR_InitTPD(void);
@@ -1762,7 +1791,6 @@
extern void _PR_InitTime(void);
extern void _PR_InitMW(void);
extern void _PR_InitRWLocks(void);
-extern void _PR_NotifyCondVar(PRCondVar *cvar, PRThread *me);
extern void _PR_CleanupThread(PRThread *thread);
extern void _PR_CleanupCallOnce(void);
extern void _PR_CleanupMW(void);
« no previous file with comments | « nspr/pr/include/prinit.h ('k') | nspr/pr/src/md/windows/w95thred.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698