Commit 10bd340cbd1a040376d2fc716b9fefbb63f73845

Authored by Georg Hopp
1 parent c00860f7

signal handling

... ... @@ -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