~mdw
/
secnet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
poll: Introduce and use BEFOREPOLL_WANT_FDS
[secnet]
/
secnet.c
diff --git
a/secnet.c
b/secnet.c
index
465a93f
..
84aac21
100644
(file)
--- a/
secnet.c
+++ b/
secnet.c
@@
-42,9
+42,9
@@
struct poll_interest {
int32_t max_nfds;
int32_t nfds;
cstring_t desc;
int32_t max_nfds;
int32_t nfds;
cstring_t desc;
-
struct poll_interest *next
;
+
LIST_ENTRY(poll_interest) entry
;
};
};
-static
struct poll_interest *reg=NULL
;
+static
LIST_HEAD(, poll_interest) reg = LIST_HEAD_INITIALIZER(®)
;
static int32_t total_nfds=10;
static bool_t finished=False;
static int32_t total_nfds=10;
static bool_t finished=False;
@@
-241,8
+241,7
@@
void register_for_poll(void *st, beforepoll_fn *before,
i->desc=desc;
assert(total_nfds < INT_MAX - max_nfds);
total_nfds+=max_nfds;
i->desc=desc;
assert(total_nfds < INT_MAX - max_nfds);
total_nfds+=max_nfds;
- i->next=reg;
- reg=i;
+ LIST_INSERT_HEAD(®, i, entry);
return;
}
return;
}
@@
-310,7
+309,7
@@
static void run(void)
now_global=((uint64_t)tv_now_global.tv_sec*(uint64_t)1000)+
((uint64_t)tv_now_global.tv_usec/(uint64_t)1000);
idx=0;
now_global=((uint64_t)tv_now_global.tv_sec*(uint64_t)1000)+
((uint64_t)tv_now_global.tv_usec/(uint64_t)1000);
idx=0;
-
for (i=reg; i; i=i->next
) {
+
LIST_FOREACH(i, ®, entry
) {
int check;
for (check=0; check<i->nfds; check++) {
if(fds[idx+check].revents & POLLNVAL) {
int check;
for (check=0; check<i->nfds; check++) {
if(fds[idx+check].revents & POLLNVAL) {
@@
-323,7
+322,7
@@
static void run(void)
remain=total_nfds;
idx=0;
timeout=-1;
remain=total_nfds;
idx=0;
timeout=-1;
-
for (i=reg; i; i=i->next
) {
+
LIST_FOREACH(i, ®, entry
) {
nfds=remain;
rv=i->before(i->state, fds+idx, &nfds, &timeout);
if (rv!=0) {
nfds=remain;
rv=i->before(i->state, fds+idx, &nfds, &timeout);
if (rv!=0) {
@@
-332,7
+331,8
@@
static void run(void)
fatal("run: beforepoll_fn (%s) returns %d",i->desc,rv);
}
if (timeout<-1) {
fatal("run: beforepoll_fn (%s) returns %d",i->desc,rv);
}
if (timeout<-1) {
- fatal("run: beforepoll_fn (%s) set timeout to %d",timeout);
+ fatal("run: beforepoll_fn (%s) set timeout to %d",
+ i->desc,timeout);
}
idx+=nfds;
remain-=nfds;
}
idx+=nfds;
remain-=nfds;
@@
-402,9
+402,7
@@
static void become_daemon(void)
}
if (secnet_is_daemon) {
/* stderr etc are redirected to the system/log facility */
}
if (secnet_is_daemon) {
/* stderr etc are redirected to the system/log facility */
- if (pipe(errfds)!=0) {
- fatal_perror("can't create pipe for stderr");
- }
+ pipe_cloexec(errfds);
if (dup2(errfds[1],0) < 0
|| dup2(errfds[1],1) < 0
|| dup2(errfds[1],2) < 0)
if (dup2(errfds[1],0) < 0
|| dup2(errfds[1],1) < 0
|| dup2(errfds[1],2) < 0)