summaryrefslogtreecommitdiffstats
path: root/lib/librt/sigev_thread.h
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2006-03-07 08:28:07 +0000
committerdavidxu <davidxu@FreeBSD.org>2006-03-07 08:28:07 +0000
commit13fd270405b6f9fe2655df371b11bcae8b976c95 (patch)
tree32dd7b6f4eeded9a164d22570f864d7b56c28e9b /lib/librt/sigev_thread.h
parent712c56267911abd53a3e221fadce4ee9523011d3 (diff)
downloadFreeBSD-src-13fd270405b6f9fe2655df371b11bcae8b976c95.zip
FreeBSD-src-13fd270405b6f9fe2655df371b11bcae8b976c95.tar.gz
1. Always call user callback function in newly created thread, it seems
POSIX implies that the user callback function must be executed in clean environment. 2. Use newly introduced pthread stubs in libc.
Diffstat (limited to 'lib/librt/sigev_thread.h')
-rw-r--r--lib/librt/sigev_thread.h38
1 files changed, 11 insertions, 27 deletions
diff --git a/lib/librt/sigev_thread.h b/lib/librt/sigev_thread.h
index 89512f9..7e30c2a 100644
--- a/lib/librt/sigev_thread.h
+++ b/lib/librt/sigev_thread.h
@@ -32,9 +32,8 @@
#include <sys/types.h>
#include <sys/queue.h>
-#include <setjmp.h>
-struct sigev_thread_node;
+struct sigev_thread;
struct sigev_node;
typedef uintptr_t sigev_id_t;
@@ -42,8 +41,6 @@ typedef void (*sigev_dispatch_t)(struct sigev_node *);
struct sigev_node {
LIST_ENTRY(sigev_node) sn_link;
- LIST_ENTRY(sigev_node) sn_allist;
- TAILQ_ENTRY(sigev_node) sn_actq;
int sn_type;
sigev_id_t sn_id;
sigev_dispatch_t sn_dispatch;
@@ -51,51 +48,38 @@ struct sigev_node {
void *sn_func;
int sn_flags;
int sn_gen;
- int sn_usethreadpool;
siginfo_t sn_info;
- struct sigev_thread_node * sn_tn;
+ pthread_attr_t sn_attr;
+ struct sigev_thread *sn_tn;
};
-struct sigev_thread_attr {
- int sna_policy;
- int sna_inherit;
- int sna_prio;
- size_t sna_stacksize;
- void *sna_stackaddr;
- size_t sna_guardsize;
-};
-struct sigev_thread_node {
- TAILQ_ENTRY(sigev_thread_node) tn_link;
+struct sigev_thread {
+ LIST_ENTRY(sigev_thread) tn_link;
pthread_t tn_thread;
struct sigev_node *tn_cur;
- struct sigev_thread_attr tn_sna;
int tn_refcount;
long tn_lwpid;
- jmp_buf tn_jbuf;
+ pthread_cond_t tn_cv;
};
#define SNF_WORKING 0x01
#define SNF_REMOVED 0x02
-#define SNF_ONESHOT 0x04
-#define SNF_ACTQ 0x08
-#define SNF_THREADPOOL 0x10
+#define SNF_SYNC 0x04
-#define SIGEV_SIGSERVICE (SIGTHR+1)
+#define SIGSERVICE (SIGTHR+1)
int __sigev_check_init();
struct sigev_node *__sigev_alloc(int, const struct sigevent *,
- struct sigev_node *, int usethreadpool);
+ struct sigev_node *, int);
struct sigev_node *__sigev_find(int, sigev_id_t);
void __sigev_get_sigevent(struct sigev_node *, struct sigevent *,
sigev_id_t);
int __sigev_register(struct sigev_node *);
int __sigev_delete(int, sigev_id_t);
int __sigev_delete_node(struct sigev_node *);
-int __sigev_list_lock(void);
-int __sigev_list_unlock(void);
-int __sigev_thread_list_lock(void);
-int __sigev_thread_list_unlock(void);
+void __sigev_list_lock(void);
+void __sigev_list_unlock(void);
void __sigev_free(struct sigev_node *);
#endif
OpenPOWER on IntegriCloud