Deleted Added
full compact
sigev_thread.h (156136) sigev_thread.h (156267)
1/*
2 * Copyright (c) 2005 David Xu <davidxu@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
1/*
2 * Copyright (c) 2005 David Xu <davidxu@freebsd.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 * $FreeBSD: head/lib/librt/sigev_thread.h 156136 2006-03-01 06:37:34Z davidxu $
26 * $FreeBSD: head/lib/librt/sigev_thread.h 156267 2006-03-04 00:18:19Z davidxu $
27 *
28 */
29
30#ifndef _SIGEV_THREAD_H_
31#define _SIGEV_THREAD_H_
32
33#include <sys/types.h>
34#include <sys/queue.h>
35#include <setjmp.h>
36
37struct sigev_thread_node;
38struct sigev_node;
39
40typedef uintptr_t sigev_id_t;
27 *
28 */
29
30#ifndef _SIGEV_THREAD_H_
31#define _SIGEV_THREAD_H_
32
33#include <sys/types.h>
34#include <sys/queue.h>
35#include <setjmp.h>
36
37struct sigev_thread_node;
38struct sigev_node;
39
40typedef uintptr_t sigev_id_t;
41typedef void (*sigev_dispatch_t)(struct sigev_node *, siginfo_t *);
41typedef void (*sigev_dispatch_t)(struct sigev_node *);
42
43struct sigev_node {
44 LIST_ENTRY(sigev_node) sn_link;
45 LIST_ENTRY(sigev_node) sn_allist;
42
43struct sigev_node {
44 LIST_ENTRY(sigev_node) sn_link;
45 LIST_ENTRY(sigev_node) sn_allist;
46 TAILQ_ENTRY(sigev_node) sn_actq;
46 int sn_type;
47 sigev_id_t sn_id;
48 sigev_dispatch_t sn_dispatch;
49 union sigval sn_value;
50 void *sn_func;
51 int sn_flags;
52 int sn_gen;
47 int sn_type;
48 sigev_id_t sn_id;
49 sigev_dispatch_t sn_dispatch;
50 union sigval sn_value;
51 void *sn_func;
52 int sn_flags;
53 int sn_gen;
54 int sn_usethreadpool;
55 siginfo_t sn_info;
53 struct sigev_thread_node * sn_tn;
54};
55
56struct sigev_thread_attr {
57 int sna_policy;
58 int sna_inherit;
59 int sna_prio;
56 struct sigev_thread_node * sn_tn;
57};
58
59struct sigev_thread_attr {
60 int sna_policy;
61 int sna_inherit;
62 int sna_prio;
60 int sna_scope;
61 size_t sna_stacksize;
62 void *sna_stackaddr;
63 size_t sna_guardsize;
64};
65
66struct sigev_thread_node {
67 TAILQ_ENTRY(sigev_thread_node) tn_link;
68 pthread_t tn_thread;
69 struct sigev_node *tn_cur;
70 struct sigev_thread_attr tn_sna;
63 size_t sna_stacksize;
64 void *sna_stackaddr;
65 size_t sna_guardsize;
66};
67
68struct sigev_thread_node {
69 TAILQ_ENTRY(sigev_thread_node) tn_link;
70 pthread_t tn_thread;
71 struct sigev_node *tn_cur;
72 struct sigev_thread_attr tn_sna;
73 int tn_refcount;
71 long tn_lwpid;
74 long tn_lwpid;
72 pthread_cond_t tn_cv;
73 jmp_buf tn_jbuf;
74};
75
76#define SNF_WORKING 0x01
77#define SNF_REMOVED 0x02
75 jmp_buf tn_jbuf;
76};
77
78#define SNF_WORKING 0x01
79#define SNF_REMOVED 0x02
78#define SNF_ONESHOT 0x04
80#define SNF_ONESHOT 0x04
81#define SNF_ACTQ 0x08
82#define SNF_THREADPOOL 0x10
79
80#define SIGEV_SIGSERVICE (SIGTHR+1)
81
82int __sigev_check_init();
83
84#define SIGEV_SIGSERVICE (SIGTHR+1)
85
86int __sigev_check_init();
83struct sigev_node *__sigev_alloc(int, const struct sigevent *);
87struct sigev_node *__sigev_alloc(int, const struct sigevent *,
88 struct sigev_node *, int usethreadpool);
84struct sigev_node *__sigev_find(int, sigev_id_t);
85void __sigev_get_sigevent(struct sigev_node *, struct sigevent *,
86 sigev_id_t);
87int __sigev_register(struct sigev_node *);
88int __sigev_delete(int, sigev_id_t);
89int __sigev_delete_node(struct sigev_node *);
90int __sigev_list_lock(void);
91int __sigev_list_unlock(void);
92int __sigev_thread_list_lock(void);
93int __sigev_thread_list_unlock(void);
94void __sigev_free(struct sigev_node *);
95
96#endif
89struct sigev_node *__sigev_find(int, sigev_id_t);
90void __sigev_get_sigevent(struct sigev_node *, struct sigevent *,
91 sigev_id_t);
92int __sigev_register(struct sigev_node *);
93int __sigev_delete(int, sigev_id_t);
94int __sigev_delete_node(struct sigev_node *);
95int __sigev_list_lock(void);
96int __sigev_list_unlock(void);
97int __sigev_thread_list_lock(void);
98int __sigev_thread_list_unlock(void);
99void __sigev_free(struct sigev_node *);
100
101#endif