projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix more memory leaks and invalid free() in invitation.c.
[tinc]
/
src
/
event.c
diff --git
a/src/event.c
b/src/event.c
index
6603ebf
..
226a452
100644
(file)
--- a/
src/event.c
+++ b/
src/event.c
@@
-18,12
+18,8
@@
*/
#include "system.h"
*/
#include "system.h"
-
-#include "dropin.h"
#include "event.h"
#include "event.h"
-#include "net.h"
#include "utils.h"
#include "utils.h"
-#include "xalloc.h"
struct timeval now;
struct timeval now;
@@
-223,13
+219,16
@@
void timeout_del(timeout_t *timeout) {
}
#ifndef HAVE_MINGW
}
#ifndef HAVE_MINGW
-static int signal_compare(const signal_t *a, const signal_t *b) {
- return a->signum - b->signum;
-}
+
+// From Matz's Ruby
+#ifndef NSIG
+# define NSIG (_SIGMAX + 1) /* For QNX */
+#endif
+
static io_t signalio;
static int pipefd[2] = {-1, -1};
static io_t signalio;
static int pipefd[2] = {-1, -1};
-static s
play_tree_t signal_tree = {.compare = (splay_compare_t)signal_compare
};
+static s
ignal_t *signal_handle[NSIG + 1] = {
};
static void signal_handler(int signum) {
unsigned char num = signum;
static void signal_handler(int signum) {
unsigned char num = signum;
@@
-245,9
+244,7
@@
static void signalio_handler(void *data, int flags) {
return;
}
return;
}
- signal_t *sig = splay_search(&signal_tree, &((signal_t) {
- .signum = signum
- }));
+ signal_t *sig = signal_handle[signum];
if(sig) {
sig->cb(sig->data);
if(sig) {
sig->cb(sig->data);
@@
-265,20
+262,17
@@
void signal_add(signal_t *sig, signal_cb_t cb, void *data, int signum) {
return;
}
return;
}
+ sig->signum = signum;
sig->cb = cb;
sig->data = data;
sig->cb = cb;
sig->data = data;
- sig->signum = signum;
- sig->node.data = sig;
if(pipefd[0] == -1) {
pipe_init();
}
if(pipefd[0] == -1) {
pipe_init();
}
- signal(sig
->sig
num, signal_handler);
+ signal(signum, signal_handler);
- if(!splay_insert_node(&signal_tree, &sig->node)) {
- abort();
- }
+ signal_handle[signum] = sig;
}
void signal_del(signal_t *sig) {
}
void signal_del(signal_t *sig) {
@@
-288,7
+282,7
@@
void signal_del(signal_t *sig) {
signal(sig->signum, SIG_DFL);
signal(sig->signum, SIG_DFL);
- s
play_unlink_node(&signal_tree, &sig->node)
;
+ s
ignal_handle[sig->signum] = NULL
;
sig->cb = NULL;
}
#endif
sig->cb = NULL;
}
#endif