summaryrefslogtreecommitdiff
path: root/usr/src/lib/libc/inc/thr_uberdata.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libc/inc/thr_uberdata.h')
-rw-r--r--usr/src/lib/libc/inc/thr_uberdata.h22
1 files changed, 16 insertions, 6 deletions
diff --git a/usr/src/lib/libc/inc/thr_uberdata.h b/usr/src/lib/libc/inc/thr_uberdata.h
index 745547208c..442098a2d1 100644
--- a/usr/src/lib/libc/inc/thr_uberdata.h
+++ b/usr/src/lib/libc/inc/thr_uberdata.h
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -705,16 +705,23 @@ typedef struct atfork {
} atfork_t;
/*
- * Element in the table of registered process robust locks.
- * We keep track of these to make sure that we only call
- * ___lwp_mutex_register() once for each such lock.
+ * Element in the table and in the list of registered process
+ * robust locks. We keep track of these to make sure that we
+ * only call ___lwp_mutex_register() once for each such lock
+ * after it is first mapped in (or newly mapped in).
*/
typedef struct robust {
- struct robust *robust_next;
+ struct robust *robust_next; /* hash table list */
+ struct robust *robust_list; /* global list */
mutex_t *robust_lock;
} robust_t;
/*
+ * Invalid address, used to mark an unused element in the hash table.
+ */
+#define INVALID_ADDR ((void *)(uintptr_t)(-1L))
+
+/*
* Parameters of the lock registration hash table.
*/
#define LOCKSHIFT 15 /* number of hashing bits */
@@ -888,6 +895,7 @@ typedef struct uberdata {
ulwp_t *ulwp_replace_last;
atfork_t *atforklist; /* circular Q for fork handlers */
robust_t **robustlocks; /* table of registered robust locks */
+ robust_t *robustlist; /* list of registered robust locks */
struct uberdata **tdb_bootstrap;
tdb_t tdb; /* thread debug interfaces (for libc_db) */
} uberdata_t;
@@ -1096,6 +1104,7 @@ typedef struct uberdata32 {
caddr32_t ulwp_replace_last;
caddr32_t atforklist;
caddr32_t robustlocks;
+ caddr32_t robustlist;
caddr32_t tdb_bootstrap;
tdb32_t tdb;
} uberdata32_t;
@@ -1207,7 +1216,8 @@ extern void record_spin_locks(ulwp_t *);
extern void remember_lock(mutex_t *);
extern void forget_lock(mutex_t *);
extern void register_lock(mutex_t *);
-extern void unregister_locks(void);
+extern void unregister_locks(caddr_t, size_t);
+extern void unregister_all_locks(void);
#if defined(__sparc)
extern void _flush_windows(void);
#else