Showing
2 changed files
with
44 additions
and
4 deletions
... | ... | @@ -21,6 +21,8 @@ |
21 | 21 | */ |
22 | 22 | |
23 | 23 | #include <stdint.h> |
24 | +#include <signal.h> | |
25 | +#include <stdio.h> | |
24 | 26 | |
25 | 27 | #include "trbase.h" |
26 | 28 | #include "trdata.h" |
... | ... | @@ -28,6 +30,35 @@ |
28 | 30 | #include "tr/event_handler.h" |
29 | 31 | #include "tr/event_dispatcher.h" |
30 | 32 | |
33 | +volatile TR_EventDispatcher _TR_controlDispatcher; | |
34 | + | |
35 | +static | |
36 | +void | |
37 | +terminate(int signum) | |
38 | +{ | |
39 | + signal(signum, SIG_IGN); | |
40 | + /* | |
41 | + * \todo do logging here | |
42 | + */ | |
43 | + puts("signal ... go"); | |
44 | + TR_eventDispatcherShutdown(_TR_controlDispatcher); | |
45 | +} | |
46 | + | |
47 | +static | |
48 | +void | |
49 | +init_signals(void) | |
50 | +{ | |
51 | + signal(SIGTERM, terminate); | |
52 | + signal(SIGHUP, SIG_IGN); | |
53 | + signal(SIGINT, terminate); | |
54 | + signal(SIGQUIT, terminate); | |
55 | + signal(SIGABRT, terminate); | |
56 | + signal(SIGALRM, SIG_IGN); | |
57 | + signal(SIGURG, SIG_IGN); | |
58 | + | |
59 | + signal(SIGPIPE, SIG_IGN); | |
60 | +} | |
61 | + | |
31 | 62 | static |
32 | 63 | int |
33 | 64 | eventDispatcherCtor(void * _this, va_list * params) { |
... | ... | @@ -41,6 +72,11 @@ eventDispatcherCtor(void * _this, va_list * params) { |
41 | 72 | this->heartbeat = 0; |
42 | 73 | this->nextbeat = 0; |
43 | 74 | |
75 | + if (! _TR_controlDispatcher) { | |
76 | + _TR_controlDispatcher = this; | |
77 | + init_signals(); | |
78 | + } | |
79 | + | |
44 | 80 | return 0; |
45 | 81 | } |
46 | 82 | ... | ... |
... | ... | @@ -39,13 +39,17 @@ doRegister(const void * _node, const void * data) |
39 | 39 | handler_queue_hv = TR_hashGetByVal(dispatcher->handler, node->hash); |
40 | 40 | |
41 | 41 | if (handler_queue_hv) { |
42 | - handler_queue = (TR_Queue)handler_queue_hv->value; | |
42 | + handler_queue = *(TR_Queue *)handler_queue_hv->value; | |
43 | 43 | } else { |
44 | 44 | handler_queue = TR_new(TR_Queue); |
45 | 45 | handler_queue->free_msgs = 0; |
46 | - TR_hashAdd( | |
47 | - dispatcher->handler, | |
48 | - TR_new(TR_HashValue, node->key, node->nkey, &handler_queue, sizeof(TR_Queue))); | |
46 | + handler_queue_hv = TR_new( | |
47 | + TR_HashValue, | |
48 | + node->key, | |
49 | + node->nkey, | |
50 | + &handler_queue, | |
51 | + sizeof(TR_Queue)); | |
52 | + TR_hashAdd(dispatcher->handler, handler_queue_hv); | |
49 | 53 | } |
50 | 54 | |
51 | 55 | TR_queuePut(handler_queue, current_handler); | ... | ... |
Please
register
or
login
to post a comment