Commit 9f9d937905ae906858dfa47ed60535b411895efd
1 parent
e35a763a
now all compiles under linux...need replacement for CONDITION_VARIABLE for win32
Showing
14 changed files
with
77 additions
and
28 deletions
... | ... | @@ -54,6 +54,8 @@ AC_SUBST(SOCK_LIB) |
54 | 54 | AC_SUBST(THREAD_LIB) |
55 | 55 | AC_SUBST(THREAD_CFLAGS) |
56 | 56 | |
57 | +AM_PROG_CC_C_O | |
58 | + | |
57 | 59 | AM_CONDITIONAL(USE_THREADS, test "x$thread" != "x") |
58 | 60 | AM_CONDITIONAL(PTHREAD, test "x$thread" == "xPTHREAD") |
59 | 61 | AM_CONDITIONAL(WTHREAD, test "x$thread" == "xWTHREAD") | ... | ... |
... | ... | @@ -47,7 +47,7 @@ |
47 | 47 | #define THREAD_ID pthread_self () |
48 | 48 | #define SELF_THREAD pthread_self () |
49 | 49 | #define THREAD_EQUAL pthread_equal |
50 | -#define NEW_THREAD(th,f, a) thread_new ((th), (f), (a)) | |
50 | +#define NEW_THREAD(f, a) thread_new ((f), (a)) | |
51 | 51 | #define END_THREAD thread_end |
52 | 52 | #define DETACH_THREAD(thread) pthread_detach ((thread)) |
53 | 53 | #define CANCEL_THREAD(thread) pthread_cancel ((thread)) |
... | ... | @@ -89,7 +89,7 @@ |
89 | 89 | |
90 | 90 | typedef T_PROC_RET (*scot_thread_entry_fptr) (void *); |
91 | 91 | |
92 | -void thread_new (THREAD_T *, T_PROC_RET (*)(void *), void*); | |
92 | +THREAD_T thread_new (T_PROC_RET (*)(void *), void*); | |
93 | 93 | int thread_join (THREAD_T, uint32_t); |
94 | 94 | void thread_end (THREAD_T, uint32_t); |
95 | 95 | void thread_mutex_new (THREAD_MUTEX_T *); | ... | ... |
... | ... | @@ -40,7 +40,9 @@ |
40 | 40 | #define THREAD_ID_T DWORD |
41 | 41 | #define THREAD_ID GetCurrentThreadId () |
42 | 42 | #define SELF_THREAD GetCurrentThread () |
43 | -#define NEW_THREAD thread_new | |
43 | +#define THREAD_EQUAL(a, b) thread_equal ((a), (b)) | |
44 | +#define NEW_THREAD(f, a) thread_new ((f), (a)) | |
45 | +#define END_THREAD thread_end | |
44 | 46 | #define CANCEL_THREAD(thread) (! TerminateThread ((thread), -1)) |
45 | 47 | #define EXIT_THREAD(retval) _endthreadex ((DWORD) (retval)) |
46 | 48 | #define JOIN_THREAD thread_join |
... | ... | @@ -73,6 +75,8 @@ typedef T_PROC_RET (*scot_thread_entry_fptr) (void *); |
73 | 75 | |
74 | 76 | THREAD_T thread_new (T_PROC_RET (*)(void *), void*); |
75 | 77 | int thread_join (THREAD_T, unsigned int); |
78 | +void thread_end (THREAD_T, unsigned int); | |
79 | +int thread_equal (THREAD_T, THREAD_T); | |
76 | 80 | THREAD_MUTEX_T thread_mutex_new (void); |
77 | 81 | int thread_mutex_lock (THREAD_MUTEX_T *); |
78 | 82 | ... | ... |
... | ... | @@ -6,12 +6,19 @@ LIBS += @THREAD_LIB@ @SOCK_LIB@ |
6 | 6 | |
7 | 7 | INCLUDES = -I../include @INOTIFY_INCLUDES@ |
8 | 8 | |
9 | +#libscot_source = scot_common.c cmdla.c \ | |
10 | +# list.c stack.c queue.c \ | |
11 | +# thread.c dir.c \ | |
12 | +# exception.c scot_exceptions.c \ | |
13 | +# stream.c stream_ctl.c socket.c socket_in.c \ | |
14 | +# event.c event_listener.c | |
15 | + | |
9 | 16 | libscot_source = scot_common.c cmdla.c \ |
10 | 17 | list.c stack.c queue.c \ |
11 | 18 | thread.c dir.c \ |
12 | 19 | exception.c scot_exceptions.c \ |
13 | 20 | stream.c stream_ctl.c socket.c socket_in.c \ |
14 | - event.c event_listener.c \ | |
21 | + event.c event_listener.c \ | |
15 | 22 | stream_pool_base.c stream_pool_management.c \ |
16 | 23 | stream_pool_fraction.c spf_thread_impl.c |
17 | 24 | ... | ... |
... | ... | @@ -138,7 +138,7 @@ static |
138 | 138 | int |
139 | 139 | compare_thread_excenv_t (const thread_excenv_t *a , const thread_excenv_t *b) |
140 | 140 | { |
141 | - return ! THREAD_EQUAL (*(THREAD_T *) a, *(THREAD_T *) b); | |
141 | + return ! THREAD_EQUAL (a->thread_handle, b->thread_handle); | |
142 | 142 | } |
143 | 143 | |
144 | 144 | /** | ... | ... |
... | ... | @@ -36,13 +36,17 @@ join_thread (void * arg) |
36 | 36 | return NULL; |
37 | 37 | } |
38 | 38 | |
39 | -void | |
40 | -thread_new (THREAD_T * handle, T_PROC_RET (*t_proc)(void *), void* arg) | |
39 | +THREAD_T | |
40 | +thread_new (T_PROC_RET (*t_proc)(void *), void* arg) | |
41 | 41 | { |
42 | - if (pthread_create (handle, NULL, t_proc, arg) != 0) | |
42 | + THREAD_T handle; | |
43 | + | |
44 | + if (pthread_create (&handle, NULL, t_proc, arg) != 0) | |
43 | 45 | { |
44 | - SCOT_MEM_ZERO (handle, sizeof (THREAD_T)); | |
46 | + SCOT_MEM_ZERO (&handle, sizeof (THREAD_T)); | |
45 | 47 | } |
48 | + | |
49 | + return handle; | |
46 | 50 | } |
47 | 51 | |
48 | 52 | void |
... | ... | @@ -103,7 +107,7 @@ thread_join (THREAD_T thread, uint32_t timeout) |
103 | 107 | perror ("problem achiving mutex within join"); |
104 | 108 | } |
105 | 109 | |
106 | - NEW_THREAD (&join_thr, join_thread, (void *) &join_cond); | |
110 | + join_thr = NEW_THREAD (join_thread, (void *) &join_cond); | |
107 | 111 | |
108 | 112 | status = pthread_cond_timedwait ( |
109 | 113 | &(join_cond.join_alarm_cond), | ... | ... |
... | ... | @@ -124,7 +124,7 @@ scot_stream_pool_main_loop (struct scot_stream_pool * sp) |
124 | 124 | f_node = list_scot_sp_fraction_next (f_node); |
125 | 125 | f = list_scot_sp_fraction_retrive (f_node); |
126 | 126 | |
127 | - NEW_THREAD (&f->thread_handle, f->spf_entry_func, f); | |
127 | + f->thread_handle = NEW_THREAD (f->spf_entry_func, f); | |
128 | 128 | f->thread_run_flg = 1; |
129 | 129 | } |
130 | 130 | |
... | ... | @@ -150,7 +150,7 @@ scot_stream_pool_main_loop (struct scot_stream_pool * sp) |
150 | 150 | END_THREAD (f->thread_handle, INFINITE); |
151 | 151 | thread_exc_end (f->thread_handle); |
152 | 152 | } |
153 | - NEW_THREAD (&f->thread_handle, f->spf_entry_func, f); | |
153 | + f->thread_handle = NEW_THREAD (f->spf_entry_func, f); | |
154 | 154 | f->thread_run_flg = 1; |
155 | 155 | } |
156 | 156 | break; |
... | ... | @@ -164,7 +164,7 @@ scot_stream_pool_main_loop (struct scot_stream_pool * sp) |
164 | 164 | |
165 | 165 | if (f->thread_run_flg == 0) |
166 | 166 | { |
167 | - NEW_THREAD (&f->thread_handle, f->spf_entry_func, f); | |
167 | + f->thread_handle = NEW_THREAD (f->spf_entry_func, f); | |
168 | 168 | f->thread_run_flg = 1; |
169 | 169 | } |
170 | 170 | } |
... | ... | @@ -193,7 +193,7 @@ scot_stream_pool_main_loop (struct scot_stream_pool * sp) |
193 | 193 | END_THREAD (f->thread_handle, INFINITE); |
194 | 194 | thread_exc_end (f->thread_handle); |
195 | 195 | } |
196 | - NEW_THREAD (&f->thread_handle, f->spf_entry_func, f); | |
196 | + f->thread_handle = NEW_THREAD (f->spf_entry_func, f); | |
197 | 197 | f->thread_run_flg = 1; |
198 | 198 | break; |
199 | 199 | |
... | ... | @@ -201,7 +201,7 @@ scot_stream_pool_main_loop (struct scot_stream_pool * sp) |
201 | 201 | f = (struct scot_sp_fraction *) sp->cmd_arg; |
202 | 202 | if (f->thread_run_flg == 0) |
203 | 203 | { |
204 | - NEW_THREAD (&f->thread_handle, f->spf_entry_func, f); | |
204 | + f->thread_handle = NEW_THREAD (f->spf_entry_func, f); | |
205 | 205 | f->thread_run_flg = 1; |
206 | 206 | } |
207 | 207 | break; | ... | ... |
1 | 1 | #include <scot/thread.h> |
2 | +#include <scot/exception.h> | |
2 | 3 | |
3 | -THREAD_T | |
4 | +int | |
5 | +thread_equal (THREAD_T a, THREAD_T b) | |
6 | +{ | |
7 | + return (a == b); | |
8 | +} | |
9 | + | |
10 | +void | |
11 | +thread_end (THREAD_T thread, unsigned int timeout) | |
12 | +{ | |
13 | + int err; | |
14 | + | |
15 | + err = CANCEL_THREAD (thread); | |
16 | + if (err != 0) | |
17 | + THROW (EXC (EXC_ERROR, | |
18 | + err, | |
19 | + "[EVENT_SOURCE_THREAD]cancel request failed")); | |
20 | + | |
21 | + err = JOIN_THREAD (thread, timeout); | |
22 | + if (err == JOIN_TIMEOUT) | |
23 | + THROW (EXC (EXC_ERROR, | |
24 | + err, | |
25 | + "[EVENT_SOURCE_THREAD]timeout exceeded while waiting " | |
26 | + "for threads end")); | |
27 | + if (err == JOIN_ERROR) | |
28 | + THROW (EXC (EXC_ERROR, | |
29 | + err, | |
30 | + "[EVENT_SOURCE_THREAD]failure on waiting for threads end")); | |
31 | +} | |
32 | + | |
33 | +THREAD_T | |
4 | 34 | thread_new (T_PROC_RET (*t_proc)(void *), void* arg) |
5 | 35 | { |
6 | - return (_beginthreadex (NULL, 0, t_proc, arg, 0, NULL)); | |
36 | + return _beginthreadex (NULL, 0, t_proc, arg, 0, NULL); | |
7 | 37 | } |
8 | 38 | |
9 | 39 | int | ... | ... |
1 | 1 | LTLIBS = $(INTLLIBS) @SOCK_LIB@ |
2 | 2 | LIBS = $(INTLLIBS) @SOCK_LIB@ |
3 | 3 | |
4 | -PROGS = scot_test list_test exc_test \ | |
5 | - tcp_socket_serv tcp_socket_clie \ | |
6 | - multiserv | |
4 | +PROGS = scot_test list_test exc_test | |
5 | + | |
6 | +#PROGS = scot_test list_test exc_test | |
7 | 7 | |
8 | 8 | INCLUDES = -I../include @INOTIFY_INCLUDES@ |
9 | 9 | |
... | ... | @@ -12,7 +12,9 @@ PROGS += exc_thr_test |
12 | 12 | endif |
13 | 13 | |
14 | 14 | if !WIN32 |
15 | -PROGS += unx_socket_serv unx_socket_clie fs_events | |
15 | +PROGS += unx_socket_serv unx_socket_clie fs_events \ | |
16 | + tcp_socket_serv tcp_socket_clie \ | |
17 | + multiserv | |
16 | 18 | endif |
17 | 19 | |
18 | 20 | bin_PROGRAMS = $(PROGS) | ... | ... |
Please
register
or
login
to post a comment